多功能的基于pthread的多线程实用程序库

时间:2010-10-17 18:48:04

标签: c++ c linux pthreads utility

我不想重新发明轮子,而我正在寻找的东西很可能已经存在于FOSS世界中。

我正在寻找一个pthread base实用程序库,它实现了经常使用的原语来进行线程之间的通信。

我的主要需求是固定大小消息的某种阻塞队列,以及等待数据同时到达多个队列的能力(通常使用poll和使用文件句柄选择)。

这样的事情是否存在?

编程语言是C ++但我对C库很好。操作系统是Linux,但posix会做任何事情。

修改

我不是在寻找一个围绕pthreads的瘦包装器(比如boost :: thread等)。我已经开始运行了。我正在寻找更高级别的原语。基本上java.util.concurrancey为java人提供了什么。

4 个答案:

答案 0 :(得分:2)

您的要求已经纳入POSIX Message Queues

您可以反向使用select()而不是使用select()。您可以使用mq_notify()告诉您什么时候需要阅读,而不是在select()中等待。 MQ为您提供了交付信号或让它们产生新线程以读取队列的选项。

如果你真的打算使用select(),那么Linux使得这很简单,因为mqd_t类型实际上是一个文件描述符。您可以像使用select()中的任何其他FD一样使用mq_open()返回的mqd_t。

请注意,在select()中使用mqd_t是不可移植的。从理论上讲,你应该可以在其他系统上做类似的事情,但我从未测试过。由于POSIX MQ具有指向文件系统条目的路径,因此您应该能够在路径上执行直接open()并使用select()中返回的文件描述符,将其映射到mq_open()中使用的mqd_t以确定哪个队列要读。我再也没试过。

答案 1 :(得分:1)

总有boost :: thread。

答案 2 :(得分:0)

您可以尝试OpenMP,但我不确定它是否基于pthread API。

答案 3 :(得分:0)

对于什么编程语言/环境?

一些选项: