Pthreads в Visual C ++ - PullRequest
       46

Pthreads в Visual C ++

10 голосов
/ 08 марта 2010

Я экспериментирую с многопоточностью в Windows, и мне было интересно, стоит ли мне

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

Ответы [ 5 ]

7 голосов
/ 08 марта 2010
  1. Используйте Boost Threads. Когда придет C ++ 0x, у нас будет std :: threads. Boost threads имеет наиболее близкую реализацию к стандартным потокам.

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

  3. , иначе делайте потоки Windows напрямую. Вы все еще можете узнать, как работают потоки, и сформировать мысленную модель вещей. Он просто имеет тенденцию использовать примитивы синхронизации, которые немного нестандартны.

1 голос
/ 08 марта 2010

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

1 голос
/ 08 марта 2010

Если вы собираетесь много заниматься программированием на Windows, вам стоит изучить основные конструкции потоков Win32: критические секции, взаимосвязанные функции, CreateThread, WaitFor*Object и т. Д. Это не сложно понять, и они прозрачно переводятся в эквивалентные объекты в других многопоточных средах.

Однако для более продвинутых конструкций потоков, таких как семафоры, события и т. Д., Я бы использовал библиотеку pthreads, поскольку документация по ним имеет тенденцию быть более ясной, а примеры - более многочисленными.

0 голосов
/ 08 марта 2010
0 голосов
/ 08 марта 2010

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

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

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

...