我不想重新发明轮子,而且我正在寻找的东西很可能已经存在于 FOSS 世界中。
我正在寻找一个基于 pthread 的实用程序库,它实现了常用的原语以在线程之间进行通信。
我的主要需求是某种用于固定大小消息的阻塞队列,以及等待数据同时到达多个队列的能力(通常使用带有文件句柄的轮询和选择来执行此操作)。
这样的事情存在吗?
编程语言是 C++,但我对 C 库很满意。操作系统是 Linux,但任何 posix 都可以。
编辑
我不是在寻找 pthreads 的薄包装器(如 boost::thread 等)。我已经启动并运行了这个。我正在寻找更高级别的原语。基本上 java.util.concurrancey 为 java 人员提供了什么。
最佳答案
您的要求已被纳入 POSIX Message Queues 中.
您可以相反地执行此操作,而不是使用 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 来确定要读取哪个队列。再说一遍,我从来没有尝试过。
关于c++ - 基于 pthread 的多功能多线程实用程序库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3954709/