Size: a a a

2020 September 21

v

voodoo in pro.cxx
1.  может кто пояснить по либе Poco:
Poco::Event CustomTask::_custom_event;
void CustomTask::runTask()
{  
   while (!isCancelled())
   {
       if(_custom_event.tryWait(400))
       {
           ...
       }
   }
}
какой сакральный смысл в tryWait ?

2. задача - обновлять массив, к которому идут обращения в реалтайме.
устанавливается флаг isUpdate и проверяется при каждой попытке чтения , т.е. если флаг true, то получаем безопасное обновление, но недоступность информации на несколько секунд
есть ли способы сделать обновление без лишней проверки, безопасно и с минимумом простоя?
источник

AF

Aidar Fattakhov in pro.cxx
voodoo
1.  может кто пояснить по либе Poco:
Poco::Event CustomTask::_custom_event;
void CustomTask::runTask()
{  
   while (!isCancelled())
   {
       if(_custom_event.tryWait(400))
       {
           ...
       }
   }
}
какой сакральный смысл в tryWait ?

2. задача - обновлять массив, к которому идут обращения в реалтайме.
устанавливается флаг isUpdate и проверяется при каждой попытке чтения , т.е. если флаг true, то получаем безопасное обновление, но недоступность информации на несколько секунд
есть ли способы сделать обновление без лишней проверки, безопасно и с минимумом простоя?
2) почему это не даблбуффер? Они большие?
источник

v

voodoo in pro.cxx
Aidar Fattakhov
2) почему это не даблбуффер? Они большие?
откуда я знаю почему))) потому и спрашиваю, как можно ещё сделать 👀
туда загружаются файлы ~15-30Мб, ОЗУ не проблема
источник

DS

Dmitry Sokolov in pro.cxx
voodoo
1.  может кто пояснить по либе Poco:
Poco::Event CustomTask::_custom_event;
void CustomTask::runTask()
{  
   while (!isCancelled())
   {
       if(_custom_event.tryWait(400))
       {
           ...
       }
   }
}
какой сакральный смысл в tryWait ?

2. задача - обновлять массив, к которому идут обращения в реалтайме.
устанавливается флаг isUpdate и проверяется при каждой попытке чтения , т.е. если флаг true, то получаем безопасное обновление, но недоступность информации на несколько секунд
есть ли способы сделать обновление без лишней проверки, безопасно и с минимумом простоя?
Shared cow_cache ptr + atomic version. Периодически чекать версию и копировать. Копировать ptr, с mtx ессно.
источник

ПК

Побитый Кирпич... in pro.cxx
voodoo
1.  может кто пояснить по либе Poco:
Poco::Event CustomTask::_custom_event;
void CustomTask::runTask()
{  
   while (!isCancelled())
   {
       if(_custom_event.tryWait(400))
       {
           ...
       }
   }
}
какой сакральный смысл в tryWait ?

2. задача - обновлять массив, к которому идут обращения в реалтайме.
устанавливается флаг isUpdate и проверяется при каждой попытке чтения , т.е. если флаг true, то получаем безопасное обновление, но недоступность информации на несколько секунд
есть ли способы сделать обновление без лишней проверки, безопасно и с минимумом простоя?
При обновлении создавать новую копию и просто атомарно свапнуть указатели?
источник

AF

Aidar Fattakhov in pro.cxx
voodoo
откуда я знаю почему))) потому и спрашиваю, как можно ещё сделать 👀
туда загружаются файлы ~15-30Мб, ОЗУ не проблема
Спрйлер: любое решение этой штуки сделает очередь в том или ином виде
источник

DS

Dmitry Sokolov in pro.cxx
Побитый Кирпич
При обновлении создавать новую копию и просто атомарно свапнуть указатели?
Не, атомарно не свопнуть конечно. Но создать новую версию, обновить через mutex public ptr и инкрементировать версию.
источник

AF

Aidar Fattakhov in pro.cxx
Dmitry Sokolov
Не, атомарно не свопнуть конечно. Но создать новую версию, обновить через mutex public ptr и инкрементировать версию.
А потом копировать весь массив on write?
источник

v

voodoo in pro.cxx
CacheCow какой-то жирненький, нужно чёнить более low-level
источник

ПК

Побитый Кирпич... in pro.cxx
Dmitry Sokolov
Не, атомарно не свопнуть конечно. Но создать новую версию, обновить через mutex public ptr и инкрементировать версию.
А почему не свапнуть?
источник

DS

Dmitry Sokolov in pro.cxx
Побитый Кирпич
А почему не свапнуть?
Потому что нет atomic операций над shared ptr.
источник

v

voodoo in pro.cxx
на данный момент это просто массив
DataClass arr[2];
arr[active_index]
источник

AF

Aidar Fattakhov in pro.cxx
Dmitry Sokolov
Потому что нет atomic операций над shared ptr.
?
источник

AF

Aidar Fattakhov in pro.cxx
источник

DS

Dmitry Sokolov in pro.cxx
Ну поспешили, насмешили. Вон же оно всё deprecated.
источник

ПК

Побитый Кирпич... in pro.cxx
Dmitry Sokolov
Ну поспешили, насмешили. Вон же оно всё deprecated.
These functions were deprecated in favor of the specializations of the std::atomic template: std::atomic<std::shared_ptr> and std::atomic<std::weak_ptr>.
источник

ПК

Побитый Кирпич... in pro.cxx
Просто нормально сделали
источник

VF

Vitaly Farmov in pro.cxx
Dmitry Sokolov
Ну поспешили, насмешили. Вон же оно всё deprecated.
Ну вот вам недепрекейтед
https://en.cppreference.com/w/cpp/memory/shared_ptr/atomic2
источник

AF

Aidar Fattakhov in pro.cxx
Короче рекомендую посмотреть как это сделано в графоне
https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VkPresentModeKHR.html
источник

DS

Dmitry Sokolov in pro.cxx
Да не суть, в любом случае это не atomic.
источник