Pthreads в Visual C++
я экспериментирую с многопоточностью в Windows и задавался вопросом, должен ли я
- использовать Win32 API
- использовать потоки POSIX для Windows
изучение Pthreads было бы полезно, если бы я попытался разработать такие приложения на разных платформах, но я ничего не теряю, не изучая Win32 API? Или оба достаточно похожи, так что изучение одного позволяет мне легко понять другого?
5 ответов
Используйте Потоки Boost. Когда появится C++0x, у нас будет std:: threads. Boost threads имеет ближайшую реализацию к потокам std.
еще используйте pthreads. Pthreads является вторым по близости к std:: threads и образует основную основу std threads и boost threads.
еще сделайте Windows threading напрямую. Вы все еще можете узнать, как работают нити, и сформировать ментальную модель вещей. Он просто имеет тенденцию использовать синхронизацию примитивы, которые немного нестандартны.
Если вы собираетесь делать много программирования Windows, он будет платить, чтобы узнать основные Win32 потоковые конструкции: критические разделы, взаимосвязанные функции,CreateThread
, WaitFor*Object
, etc. Их нетрудно понять, и они прозрачно переводятся в эквивалентные объекты в других потоковых фреймворках.
однако для более продвинутых потоковых конструкций, таких как семафоры, события и т. д., Я бы использовал 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 (нам придется подождать несколько дней)
- Intel Threading Строительные Блоки
Visual Studio 2010 даже имеет (кажется) специальную логику отладки для отладки "параллельных задач".
взгляните на std:: thread
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2184.html
и введение
Я обнаружил, что прилипание к pthreads сохраняет мое здравомыслие по трем пунктам:
- Я не должен бороться до конца Документы WinAPI, которые обычно не любого качества.
- кто и что делает с потоками может помочь с интерфейс pthreads. Я нашел бесконечно больше хороших источников информации о pthreads в интернете.
- всякий раз, когда я реализую что-то еще сложно, что "Hello World" с WinAPI, я считаю, что это далеко больше чем можно разумно ожидать. Это просто мой эмпирический опыт. вход, правда.
Что касается возможностей, я никогда не находил, что pthreads чего-то не хватает, поэтому я не думаю, что когда-либо находил необходимость искать в другом месте. Кроме того, многое можно сказать об изучении библиотеки, которую вы сможете использовать в любой среде.