我不想重新发明轮子,而我正在寻找的东西很可能已经存在于FOSS世界中。
我正在寻找一个pthread base实用程序库,它实现了经常使用的原语来进行线程之间的通信。
我的主要需求是固定大小消息的某种阻塞队列,以及等待数据同时到达多个队列的能力(通常使用poll和使用文件句柄选择)。
这样的事情是否存在?
编程语言是C ++但我对C库很好。操作系统是Linux,但posix会做任何事情。
修改
我不是在寻找一个围绕pthreads的瘦包装器(比如boost :: thread等)。我已经开始运行了。我正在寻找更高级别的原语。基本上java.util.concurrancey为java人提供了什么。
答案 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)