универсальная многопоточная служебная библиотека на основе pthread - PullRequest
0 голосов
/ 17 октября 2010

Я не хочу изобретать велосипед, и то, что я ищу, скорее всего, уже существует в мире FOSS.

Я ищу служебную библиотеку pthread основ, которая реализует часто используемые примитивы для связи между потоками.

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

Существует ли что-то подобное?

Язык программирования - C ++, но я в порядке с библиотекой C. ОС - это Linux, но все, что сделает posix.

EDIT

Я не ищу тонкую обертку вокруг pthreads (например, boost :: thread или около того). У меня уже есть это и работает. Я ищу примитивы более высокого уровня. В основном то, что java.util.concurrancey предлагает для парней java.

Ответы [ 4 ]

2 голосов
/ 18 октября 2010

Ваши требования уже включены в очереди сообщений POSIX .

Вместо использования select () вы можете сделать это в обратном порядке. Вместо ожидания в select () вы можете использовать mq_notify () , чтобы сообщить вам, когда есть что почитать. MQ дают вам возможность получать сигнал или создавать новый поток для чтения очереди.

Если вы действительно намерены использовать select (), Linux делает это безболезненно, поскольку тип mqd_t на самом деле является файловым дескриптором. Вы можете просто использовать mqd_t, возвращенный из mq_open (), как и любой другой FD в select ().

Обратите внимание, что использование mqd_t в select () не является переносимым. Теоретически вы должны быть в состоянии сделать что-то подобное в других системах, но я никогда не проверял это. Так как POSIX MQ имеют путь к входу в файловую систему, вы должны быть в состоянии сделать прямую open () на пути и использовать возвращаемый дескриптор файла в select (), сопоставляя его с mqd_t, используемым в mq_open () для определения какую очередь читать. Опять же, я никогда не пробовал.

1 голос
/ 18 октября 2010

Всегда есть boost :: thread.

0 голосов
/ 17 октября 2010

Для какого языка программирования / среды?

Некоторые опции:

0 голосов
/ 17 октября 2010

Вы можете попробовать OpenMP , хотя я не уверен, основан ли он на pthread API или нет.

...