main()和线程()之间的通信

communication between main() and thread()

本文关键字:通信 之间 main 线程      更新时间:2023-10-16

我有一个有关线程通信的问题。有客户和服务器。

服务器:

  1. 主要功能 - 其工作是收听某些端口(TCP通信)并从客户端获取命令
  2. 线程作业是流利地将视频传输到客户端。

客户端:

  1. 主函数 - 将命令传输到服务器
  2. 线程 - 观看视频

TCP 视频部分正常工作。在服务器的主要功能之后,从客户端获取命令,我需要将命令发送到视频线程,然后从视频线程发送回服务器的主 - " O.K"。

问题是将命令从服务器的主机发送到视频线程,反之亦然。

足够,命令将是一个变量。

有什么想法吗?谢谢!

管道是两条通信的不良方法,您可以使用共享内存。在共享内存中,两个过程都可以访问可以读取或写入的某些内存,因此在另一个内存中写入或写入,反之亦然。

有关共享存储器的更多详细信息

如果线程和一个变量,则使用原子变量。如果对象,请使用锁定(在视频流循环中进行trylock,然后在主内部锁定写命令)。如果您想要命令为队列,请使用安全的同意队列

我认为您的情况:我会用Boost示例中的两个Wait-free ring buffer来完成。在一个生产者中制作两个单个生产者-consumer.ins将成为主要功能消费者的另一个线程,反之亦然。(就像在Unix中使用两个管道,但有效)

候补的环形缓冲区提供了一种将对象从一个单个"生产者"线程传递到一个没有任何锁的单个"消费者"线程的机制。此数据结构的操作是"无候补",这意味着每个操作都在恒定的步骤中完成。这使得该数据结构适合在硬实时系统中使用或与中断/信号处理程序进行通信。

无环形缓冲区

但是考虑到我不知道您的情况可能会有更多正确的方法。