Pthreads в Visual C++

я экспериментирую с многопоточностью в Windows и задавался вопросом, должен ли я

изучение Pthreads было бы полезно, если бы я попытался разработать такие приложения на разных платформах, но я ничего не теряю, не изучая Win32 API? Или оба достаточно похожи, так что изучение одного позволяет мне легко понять другого?

5 ответов


  1. Используйте Потоки Boost. Когда появится C++0x, у нас будет std:: threads. Boost threads имеет ближайшую реализацию к потокам std.

  2. еще используйте pthreads. Pthreads является вторым по близости к std:: threads и образует основную основу std threads и boost threads.

  3. еще сделайте 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 даже имеет (кажется) специальную логику отладки для отладки "параллельных задач".



Я обнаружил, что прилипание к pthreads сохраняет мое здравомыслие по трем пунктам:

  • Я не должен бороться до конца Документы WinAPI, которые обычно не любого качества.
  • кто и что делает с потоками может помочь с интерфейс pthreads. Я нашел бесконечно больше хороших источников информации о pthreads в интернете.
  • всякий раз, когда я реализую что-то еще сложно, что "Hello World" с WinAPI, я считаю, что это далеко больше чем можно разумно ожидать. Это просто мой эмпирический опыт. вход, правда.

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