[Devel] Работа с объектами из разных потоков

Vitaly Lipatov lav на etersoft.ru
Чт Окт 29 00:25:45 MSK 2015


Задача: обеспечить возможность обращения к одному объекту из разных 
потоков программы.
Пожелание: не расставлять по всему коду семафоры, поскольку в этом 
легко ошибиться и получить
плавающую ошибку.

Описание возможного решения:
A concurrent container allows multiple threads to concurrently access 
and update items in the container. Typical C++ STL containers do not 
permit concurrent update; attempts to modify them concurrently often 
result in corrupting the container. STL containers can be wrapped in a 
mutex to make them safe for concurrent access, by letting only one 
thread operate on the container at a time, but that approach eliminates 
concurrency, thus restricting parallel speedup.

Описание от Intel: Сoncurrent containers
https://software.intel.com/ru-ru/node/506076

В Сизифе:
# epm install libtbb-devel


Lockfree-структуры:
http://habrahabr.ru/company/ifree/blog/195770/
http://libcds.sourceforge.net/

В Сизифе:
# epm install libcds-devel


Intel® Concurrent Collections for C++
https://icnc.github.io/
https://github.com/icnc/icnc

В Сизифе:
# epm install libicnc-devel

Средства в Qt хоть и называются похоже: Concurrent Programming
http://doc.qt.io/qt-4.8/threads-qtconcurrent.html
но относятся к параллельному исполнению операций над данными (типа Map 
Reduce)


Предлагаю на будущее присмотреться к libcds, поскольку есть русский 
автор и много доступного описания в его статьях на Хабре.

-- 
С уважением,
Виталий Липатов,
Etersoft


Подробная информация о списке рассылки Devel