[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