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

标签 c++ c linux pthreads utility

我不想重新发明轮子,而且我正在寻找的东西很可能已经存在于 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/

相关文章:

c# - dllexport 结构指针并返回 uint8_t

objective-c - 不同情况下相同 Action 的 Switch 语句语法

c++ - 给定种子和偏移量生成下一个伪随机值

linux - 如何在多行 linux 上进行精确匹配

c++ - LLVM 查找每条分配内存的指令

c++ - Arduino与cpp文件通信

c++ - 所有 g++ 版本的 delete[] 可能存在错误或未定义此行为?

c++ - "Aborted (core dumped)"队列类dequeue方法出错

linux - 如何在centos 6上退出linux sendmail

c - 不了解 Linux 内核实时调度程序中某些功能的内部结构