c++ - 如何将数据从线程传递到父进程?

标签 c++ c pipe signals unix

我有一个使用单线程库的主进程,我只能使用主进程中的库函数。我有一个由父进程生成的线程,该线程将从网络接收到的信息放入队列中。

我需要能够告诉主进程队列中有东西。然后它可以访问队列并处理对象。线程无法处理这些对象,因为库只能由一个进程调用。

我想我需要使用管道和信号。我还从各种新闻组中了解到我需要使用“ self 欺骗”管道。

这个场景应该如何实现?

以下帖子的更具体案例:

How can unix pipes be used between main process and thread?

最佳答案

为什么不使用简单的 FIFO(命名管道)?主进程会自动阻塞,直到它可以读取一些东西。
如果它不应该阻塞,则必须可以进行轮询,但它可能会占用 CPU。可能存在用于此目的的高效库。

我不建议使用信号,因为它们很容易出错。如果您仍然想使用它们,我发现的最简单的方法是:

  • 屏蔽每个线程中的所有信号,
  • 一个特殊的线程使用 sigwait() 处理信号。它可能必须唤醒另一个线程来处理信号,例如使用条件变量。

优点是您不必再担心从处理程序调用哪个函数是安全的。

关于c++ - 如何将数据从线程传递到父进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/972458/

相关文章:

c++ - 在 C 和 C++ 中,使用逗号运算符(如 "a = b,++a;")的表达式是否未定义?

linux - 将 stderr 从 cron 重定向到管道

c - mkfifo() 无法在 C 中创建文件

c++ - 将像素格式从 CVPixelBuffer 映射到它们的等效 V4L

c++ - 在 vscode 上编译错误。类型说明符是 C++11 扩展

c++ - Boost Subgraph 和 Bundled 属性

c - 量化Linux下C中进程的RAM,CPU使用

c - 使用分配在堆栈上的数组从不兼容的指针类型警告中初始化

c++ - flock 不会阻塞

c - 如何动态创建 Unix 管道?