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

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

О чем Ваше мнение boost::thread или Pthreads? Pthreads выполняет только на POSIX совместимые системы?

Что относительно поточной обработки поддерживают в Qt библиотека?

26
задан Sarang 16 November 2012 в 23:35
поделиться

11 ответов

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

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

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

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

33
ответ дан 28 November 2019 в 06:40
поделиться

Также посмотрите 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]);

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

4
ответ дан 28 November 2019 в 06:40
поделиться

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

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

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

9
ответ дан 28 November 2019 в 06:40
поделиться

SDL прост, кроссплатформенен и поддерживает многопоточность.

0
ответ дан 28 November 2019 в 06:40
поделиться

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

4
ответ дан 28 November 2019 в 06:40
поделиться

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

2
ответ дан 28 November 2019 в 06:40
поделиться

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

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

0
ответ дан 28 November 2019 в 06:40
поделиться

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

2
ответ дан 28 November 2019 в 06:40
поделиться

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

1
ответ дан 28 November 2019 в 06:40
поделиться

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

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

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

1
ответ дан 28 November 2019 в 06:40
поделиться

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

2
ответ дан 28 November 2019 в 06:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: