Pthreads в Visual C++

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

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

10
задан Jacob 8 March 2010 в 18:07
поделиться

5 ответов

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

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

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

7
ответ дан 4 December 2019 в 01:56
поделиться
0
ответ дан 4 December 2019 в 01:56
поделиться

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

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

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

0
ответ дан 4 December 2019 в 01:56
поделиться

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

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

1
ответ дан 4 December 2019 в 01:56
поделиться

Если вы используете 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
ответ дан 4 December 2019 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: