Давайте начнем назад:
Как реализовать потоки в библиотеке?
Это не так, по крайней мере, в (чистом) C ++. Для этого требуется поддержка language (компилятор - только реализация).
На данный момент используются 2 вещи:
- код сборки для некоторых деталей (как в библиотеке
pthread
)
- специальные инструкции компилятора для других (зависит от компилятора и платформы)
Оба являются хрупкими и требуют огромного количества работы для переносимости. По сути, это означает, что в коде нужно много #ifdef
частей для тестирования компилятора и целевой архитектуры, проверки поддержки некоторых директив и т. Д ...
Именно поэтому было сочтено необходимым добавить поддержку потоков в C ++ 0x.
Как мне сделать многопоточность?
Даже перед тем, как выбрать библиотеку, вы должны выбрать метод. Есть 2 способа программирования многопоточных приложений (и вы можете комбинировать их):
- Общение с помощью общего доступа : это означает использование мьютексов, атомарных операций и т. Д. ... вы можете использовать
pthread
на платформах Linux, но я бы порекомендовал Boost.Thread
(среди прочих) для его переносимости.
- Обмен информацией через общение : более новый и адаптированный к распределенным вычислениям, это происходит из функциональных языков. Это означает передачу сообщений из одного потока в другой и не совместное использование каких-либо ресурсов. Вы можете использовать FastFlow или Intel Thread Building Blocks aka
TBB
.
Вы можете, возможно, объединить два, но было бы лучше не делать этого. Лично я нашел описание FastFlow совершенно потрясающим: оно поощряет программирование без блокировок. Кроме того, основным преимуществом второго метода является то, что он лучше адаптирован к многопроцессорному программированию и масштабируется в распределенных средах.
Для начала я бы порекомендовал сосредоточиться на одном из них и создать на нем несколько приложений. Если вам удобно, вы можете попробовать другой, но будьте готовы начать заново, они такие разные.