-1

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

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

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

这样的事情存在吗?

编程语言是 C++,但我对 C 库很好。操作系统是 Linux,但任何 posix 都可以。

编辑

我不是在寻找围绕 pthreads 的薄包装器(比如 boost::thread 左右)。我已经启动并运行了它。我正在寻找更高级别的原语。基本上 java.util.concurrancey 为 java 人提供了什么。

4

4 回答 4

2

您的要求已经融入POSIX 消息队列

您可以反向执行,而不是使用 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 以确定要读取哪个队列。同样,我从未尝试过。

于 2010-10-17T20:41:15.580 回答
1

总是有 boost::thread。

于 2010-10-17T21:17:39.077 回答
0

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

于 2010-10-17T18:53:32.903 回答
0

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

一些选项:

于 2010-10-17T19:18:03.203 回答