Подтвердить что ты не робот

Есть ли кросс-платформенная библиотека потоков в С++?

Я ищу простую в использовании кросс-платформенную библиотеку потоков, написанную на С++.

Как вы относитесь к boost::thread или Pthreads? Работает ли Pthreads только на совместимых с POSIX системах?

Как насчет поддержки потоков в библиотеке Qt?

4b9b3361

Ответ 1

Boost.Thread - это проект для следующей стандартной библиотеки потоков на языке С++. Зная это, я предпочитаю использовать его, поскольку он дает некоторые сильные гарантии (потому что он становится стандартным).

Обновление: теперь, когда у нас есть стандартные библиотеки потоков, есть еще несколько исправлений. Некоторые форсированные конструкции, такие как boost:: shared_mutex, не были стандартизированы (но могут быть позже). Однако в стандартной библиотеке лучше использовать семантику перемещения. Полезно знать, прежде чем выбирать библиотеку. Кроме того, при использовании библиотеки потоковой передачи С++ 11 требуется компилятор, который ее предоставляет. Сегодня это не так для всех компиляторов.

Обновление: Теперь [Nov2012] большинство стандартных компиляторов предоставляют библиотеку потоков С++ 11. VS2012, GCC4.8 и Clang3.1 имеют поддержку потоков и примитивов синхронизации и атомных операций. Для полной реализации вы также можете использовать только поток Энтони Уильямса. Это совместимая с С++ 11 библиотека, поддерживаемая в Windows/Mac и Linux.

Ссылки для статуса функций С++ 11 с различными компиляторами:

Ответ 2

Существует библиотека потоков, которая поставляется с С++ 11. Он был основан на библиотеке потоковой передачи. К сожалению, я, похоже, помню, что между Boost.Threads и С++ 11 есть нетривиальные различия. Тем не менее, если вы планируете перейти на стандартную библиотеку потоков С++, я считаю, что Boost.Threads является самым близким к вам.

Я полагаю, что под капотом эти библиотеки будут использовать Pthreads на POSIX-системах, и всякая встроенная поддержка потоков доступна в другом месте.

Отказ от ответственности: я не работал ни с одним из двух.

Ответ 3

Pthreads работают только в системах POSIX. QThread от Qt - это путь. Он доступен на платформах: Linux, Mac OS X, Windows, Embedded Linux, Windows CE, Symbian, Maemo.

Ответ 4

Также посмотрите OpenMP, это набор (несколько стандартных) pragma спецификаций, поддерживаемый большинство основных компиляторов. Хороший результат OpenMP заключается в том, что он прост и ваш код можно легко скомпилировать как в однопользовательских, так и в многопоточных версиях.

Простой пример:

std::vector<double> a, b;
...
double sum = 0.0;
...
#pragma omp parallel for reduction(+:sum)
  for (i=0; i < n; i++)
    sum = sum + (a[i] * b[i]);

Очевидно, что можно сделать больше complex вещи.

Ответ 6

Qt имеет неплохую поддержку потоков. Если вам просто нужно создать поток и запустить в нем некоторый код, QThread - это все, что вам нужно. Существует много других классов высокого уровня, которые могут помочь вам в пулах потоков или даже абстрагировать параллельное выполнение (инфраструктура QtConcurrent).

Ответ 7

Перечислите соответствующие платформы. Если вы используете, скажем, Linux/Mac/Windows, то boost:: thread, скорее всего, сделает вас хорошо, пока С++ 0x (harhar) не предоставит std:: thread.

Ответ 8

Я использовал pthreads для кода, который работает на нескольких платформах. Чтобы обойти Windows недостаток pthreads, я использовал следующую библиотеку с открытым исходным кодом с большим успехом: POSIX Threads для Windows

Ответ 9

wxWidgets имеет классы потоков, а поскольку wxWidgets независим от платформы, это может быть просто лучше для u.

Ответ 10

Boost.Threads построен поверх PThreads в системах UNIX и потоках Win32 в Windows.

Библиотека ускорения синтаксически проста, и весь волосатый бизнес правильно взаимодействующего кода на С++ с библиотеками C позаботится об этом за кулисами. Если вам не очень нравится С++, PThreads может показаться более простым с его простым API C.

Qt Threads также является хорошей библиотекой, но поскольку я использую несколько других библиотек boost, я буду компилировать и связывать с Boost независимо от того, что. Я не всегда могу ссылаться на Qt. И, ну, я просто не хочу вспоминать, как использовать две разные библиотеки.

Ответ 11

SDL прост, кросс-платформенный и поддерживает потоки.

Ответ 12

Pthread является частью Posix, но не каждая система posix будет иметь потоки. pthreads наиболее портативен.

Какие платформы вы будете поддерживать?