POSIX темы опыт? (Или рекомендую лучше) - PullRequest
2 голосов
/ 27 апреля 2009

Я ищу легкий многопоточный фреймворк для C ++. Я нашел POSIX темы.
Пожалуйста, поделитесь своим практическим опытом с потоками POSIX: прежде чем я начну с него, я хочу узнать его плюсы и минусы от реальных людей, а не от вики.
Если бы вы практически сравнили это с чем-то (может быть, лучше), было бы интересно узнать также.

UPD: кроссплатформенные функции очень важны для меня, поэтому я был бы признателен за описанное направление.

UPD2: У меня уже есть опыт работы с одним фреймворком для QNX / Win32, но он не легкий и, о, я забыл упомянуть, он коммерческий, а не бесплатный, но мне нужен бесплатно.

Ответы [ 8 ]

12 голосов
/ 27 апреля 2009

Я нашел Boost.Threads , чтобы быть действительно хорошим, особенно после переписывания 1.35. POSIX-потоки в Windows не так уж просты, и это C API, поэтому я бы определенно предпочел Boost. В нем есть все, что вам нужно, он портативный и не требует особых настроек.

3 голосов
/ 01 мая 2009

Еще один API C-потока - это GThreads из GLib. Между некоторыми вызовами gthread и pthread, такими как pthread_create, есть отображение 1: 1, но у gthreads есть две большие функции, которые я считаю очень полезными:

  • пула потоков и
  • асинхронные очереди для отправки сообщений между потоками.

Пулы потоков очень мощные, позволяющие такие вещи, как динамическое изменение размера пула. Смотри http://library.gnome.org/devel/glib/2.20/glib-Threads.html

2 голосов
/ 27 апреля 2009

Если вам не нравится Boost API потоков, то вы можете посмотреть POCO .

2 голосов
/ 27 апреля 2009

Я использовал POSIX некоторое время назад для программы, которую я написал. Он отлично работал на Linux и Solaris и не очень сложен в реализации. Мой брат, с другой стороны, является программистом Windows и предпочитает повышать Posix. Я думаю, это зависит от вашей цели. Я нашел, что повышение было немного на раздутой стороне и услышал плохие вещи об этом. Мой брат думает, что это величайшая вещь с нарезанного хлеба. Я полагаю, это брод против Chevy. У каждого будет свое мнение.

2 голосов
/ 27 апреля 2009

API потоков POSIX - это API C, а не C ++.

Для чего вы хотите его использовать? Лично я считаю, что это очень неуклюжий и слишком многословный API. Но это ваш лучший выбор, если вы хотите заняться кроссплатформенной разработкой под Unix / Linux-подобные операционные системы. Он изначально не поддерживается в Windows.

Лично я бы не использовал потоковый или какой-либо другой OS-зависимый API прямо в вашем коде. Создайте еще один слой абстракции поверх него. Например, мы создали то, что мы называем «слой ОС»; среда C ++ для работы с потоками, семафорами, таймерами, мьютексами и т. д. Наш код использует это исключительно. Под капотом у нас есть реализации для POSIX, Win32, INTEGRITY и vxWorks. Это позволяет нашему коду работать на самых разных платформах.

Если вы не хотите создавать свой собственный слой, вы можете использовать многие другие, такие как Boost, Qt и т. Д.

1 голос
/ 15 мая 2009

Библиотека Boost Threads - это, вероятно, ваш лучший выбор, если вы работаете в C ++. У меня был очень положительный опыт как на Unix, так и на win32. Избегайте ACE - плохой дизайн, неправильный подход. Также взгляните на Intel TBB , хотя я не использовал его на практике.

1 голос
/ 29 апреля 2009

Как вы уже упоминали, QNX взгляните на ACE . Это обширная инфраструктура, которая доступна для многих платформ (включая QNX). Другие уже упоминали Повышение .

Рекомендуется использовать одну из этих библиотек вместо низкоуровневых, непереносимых и подверженных ошибкам API-интерфейсов C.

0 голосов
/ 27 апреля 2009

Я обнаружил, что он очень похож на API потока win32, единственное (реальное) отличие, о котором вам нужно знать, это то, что мьютексы win32 не блокируются при использовании в том же потоке, что и posix. Кроме того, это довольно простой API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...