Я экспериментирую с многопоточностью в Windows и задавался вопросом, должен ли я
Pthreads изучения был бы полезен, если бы я пытался разработать такие приложения на различных платформах - но я теряю что-нибудь, не изучая API Win32? Или действительно ли оба достаточно подобны так, чтобы изучение того позволило мне выяснять другой легко?
Использовать потоки Boost. Когда появится C ++ 0x, у нас будет std :: threads. Реализация Boost Thread наиболее близка к стандартным потокам.
иначе используют pthreads. Pthreads является вторым ближайшим к std :: threads и составляет основную основу для std-потоков и ускоренных потоков.
иначе выполняются потоки окон напрямую. Вы все еще можете узнать, как работают потоки, и сформировать мысленную модель вещей. Он просто имеет тенденцию использовать примитивы синхронизации, которые немного нестандартны.
Посмотрите на std::thread
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2184.html
И введение
Я обнаружил, что использование pthreads спасает мой рассудок по трем пунктам:
Что касается возможностей, я никогда не находил в pthreads недостатка, поэтому не думаю, что мне когда-либо приходилось искать что-то другое. Кроме того, очень полезно изучить библиотеку, которую вы сможете использовать в любой среде.
Если вы собираетесь много программировать под Windows, вам будет полезно изучить основные конструкции потоков Win32: критические секции, блокирующие функции, CreateThread
, WaitFor*Object
и т.д.. Их нетрудно понять, и они прозрачно переводятся на эквивалентные объекты в других потоковых системах.
Однако для более продвинутых потоковых конструкций, таких как семафоры, события и т.д., я бы использовал библиотеку pthreads
, поскольку документация по ней, как правило, более понятна, а примеры более многочисленны.
Если вы используете C / C ++, попробуйте использовать функции потоков среды выполнения C / C ++. Если вы используете Win32 (или другие не-CRT-функции для создания потоков), CRT может не правильно инициализироваться в новом потоке, вызывая всевозможные проблемы (вы можете прочитать об этом здесь: http://www.codeguru.com/forum/archive/index.php/t-371305.html ).
Однако большинство потоковых функций (в CRT, Win32 или pthread) основаны на функциональности создания потоков, синхронизации потоков и уничтожения потоков. На практике это не всегда так просто.
В последний год наблюдается тенденция перехода к потоковой передаче на основе задач (ну, я так называю, я не знаю официального названия). Вместо того, чтобы запускать поток и затем выполнять в нем некоторую логику, в потоках на основе задач вы создаете задачу, а затем запрашиваете «логику потоковой передачи» для ее выполнения.
Системы, поддерживающие этот новый способ работы с потоками:
Visual Studio 2010 даже имеет ( вроде) специальная логика отладки для отладки "параллельных задач".