Какой самый простой способ создания многопоточных приложений с C / C ++? - PullRequest
6 голосов
/ 02 октября 2009

Какой самый простой способ создания многопоточных приложений с C / C ++?

Ответы [ 15 ]

14 голосов
/ 02 октября 2009

к сожалению нет простого пути. Пара опций: pthread в Linux, Win32 API-потоки в Windows или Boost :: Thread Library

13 голосов
/ 02 октября 2009

Существует нет простой способ создания многопоточного приложения на любом языке.

8 голосов
/ 02 октября 2009

Просто чтобы упомянуть это, потому что это не было упомянуто: компилятор с поддержкой OpenMP (http://openmp.org/wp/)

7 голосов
/ 02 октября 2009

Qt имеет довольно поддержка потоков и документация но, как предупредили другие, это не для начинающих. Ссылка на документ, которую я дал, указывает на короткий список чтения 1004 *

5 голосов
/ 02 октября 2009

На этот вопрос нет простого ответа. Это очень сильно зависит от того, что вы надеетесь получить от многопоточности, от платформы / компилятора и какой модели потоков вы хотите использовать. У каждого API потоков есть свои подводные камни.

И поскольку никто еще не упомянул об этом, OpenMP является еще одним вариантом, который поддерживается во многих современных основных компиляторах и предназначен для упрощения использования параллелизма. http://openmp.org/wp/

5 голосов
/ 02 октября 2009
3 голосов
/ 02 октября 2009

Прошло много времени с тех пор, как я работал в C ++, и я не видел поддержки потоков Boost , но я нашел очень полезным инкапсулировать семафор сервисов, предоставляемых ОС, обычно это либо POSIX , либо Win32, в простых классах, которые могут получить блокировки и освободить их в деструкторах, что делает их использование довольно простым.

void operateOnSharedResource(SharableResource & foo) {
    MutexLock lock(foo.getMutex());
    // do stuff to foo
    // implicit call to MutexLock dtor performs release 
}

В конечном счете, существует множество простых трюков, подобных этому, чтобы упростить программирование потоков, и я был бы удивлен, если бы Boost не имел ничего подобного сейчас (РЕДАКТИРОВАТЬ: он есть и задокументирован в Типы блокировок ).

Несмотря на это, основная проблема с написанием многопоточного кода не будет решена какой-либо сторонней библиотекой, и это понимание того, где ваш код может быть с пользой распараллелен, и где общие ресурсы должны быть затронуты и должны быть приходилось. Вот несколько практических правил, которые я использую при написании многопоточного кода.

  • Попробуйте свести к минимуму количество общих ресурсов
  • Попробуйте инкапсулировать разделяемые ресурсы в оболочки классов, которые делают все операций атомарными.
  • Сделать рабочие потоки максимально простыми

Правильная инкапсуляция действительно творит чудеса для написания более безопасного многопоточного кода, потому что чем меньше вещей вы можете увидеть, тем меньше у них может быть состояние гонки.

2 голосов
/ 20 октября 2009

Помимо уже упомянутых, ACE - еще одна популярная и широко распространенная среда C ++, которая обеспечивает инкапсуляцию потоков на нескольких платформах. Это стиль C ++ не такой современный, как, например, Boost.Thread , но он вполне зрелый.

2 голосов
/ 03 октября 2009

Boost.Thread относительно проще, поскольку он переносим, ​​хорошо документирован и имеет высокоуровневый API, такой как scoped_try_lock .

2 голосов
/ 02 октября 2009

Я не уверен насчет простейшего , но IMO - самая удобная библиотека потоков, включенная в проект Poco C ++. Для предварительного просмотра взгляните на заголовочный файл Thread.h .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...