繁体   English   中英

main()和thread()之间的通信

[英]communication between main() and thread()

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

服务器:

  1. main函数 - 它的工作是监听某个端口(TCP通信)并从客户端获取命令
  2. 线程工作是将视频流畅地传输到客户端。

客户:

  1. main函数 - 向服务器发送命令
  2. 线程 - 观看视频

TCP \\ video部分工作正常。 在服务器的主要功能之后,从客户端获取命令,我需要将命令发送到视频线程并从视频线程发送回服务器的主 - “ok”。

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

足够的命令将是一个变量..

有任何想法吗? 谢谢!

管道是双向通信的坏方法,你可以使用共享内存。 在共享内存中,两个进程都可以访问一些可以用于读取或写入的内存,这样一个中的写入在另一个的读取中是可见的,反之亦然。

有关共享内存的更多详细信息, 请访问http://www.cs.cf.ac.uk/Dave/C/node27.html

如果线程和一个变量然后使用原子变量。 如果对象然后使用锁定(trylock内部视频流循环和锁定写入命令在主内部)。 如果您希望命令为队列,则使用安全的concurent队列

我想你的情况:我会用两个来自boost示例Wait-free ring buffer 制作两个单一的生产者 - 消费者。在一个生产者中将是主要功能消费者的其他线程,在另一个生产者上反之亦然。 (就像在unix中使用两个管道但是效率很高)

无等待环形缓冲区提供了一种机制,用于将对象从一个“生产者”线程中继到一个单独的“消费者”线程而无需任何锁定。 对该数据结构的操作是“无等待”,这意味着每个操作在恒定步数内完成。 这使得该数据结构适用于硬实时系统或与中断/信号处理器通信。

无等待环形缓冲区

但考虑到我不了解你的情况,可能会有更多正确的方法。也许可以重新考虑

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM