[英]communication between main() and thread()
我有一个关于线程通信的问题。 有客户端和服务器。
服务器:
客户:
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.