我对线程通信有疑问。 有客户端和服务器。
服务器:
客户端:
TCP \ video部分工作正常。 在服务器的主要功能之后,从客户端获取命令,我需要将命令发送到视频线程并从视频线程发送回服务器的主 - “o.k”。
问题是从服务器的main发送命令到视频线程,反之亦然。
足够的命令将是一个变量..
任何想法? 谢谢!
答案 0 :(得分:1)
管道是双向通信的坏方法,你可以使用共享内存。 在共享内存中,两个进程都可以访问一些可以用于读取或写入的内存,这样一个中的写入在另一个的读取中是可见的,反之亦然。
的更多详细信息答案 1 :(得分:0)
如果线程和一个变量然后使用原子变量。如果对象然后使用锁定(trylock内部视频流循环和锁定写入命令在主内部)。如果您希望命令为队列,则使用安全的concurent队列
我想你的情况:
我会用两个Wait-free ring buffer
来自boost示例。制作两个单一的生产者 - 消费者。在一个生产者中将是主要功能消费者的其他线程,在另一个生产者上反之亦然。 (就像在unix中使用两个管道但是效率很高)
无等待环形缓冲区提供了一种机制,用于将对象从一个“生产者”线程中继到一个单独的“消费者”线程,而不需要任何锁定。对该数据结构的操作是“无等待”,这意味着每个操作在恒定步数内完成。这使得该数据结构适用于硬实时系统或与中断/信号处理器通信。
但考虑到我不了解你的情况,可能会有更多正确的方法。也许可以重新考虑