使用PTHREDS与C 进行线程通信
Thread communication with in C++ using pthreds
有两个线程T1和T2
class Sender{
public:
void sendMessage();
};
class Reciever{
public:
void getMessage(string msg);
};
考虑发件人在线程T1中,reciever r在螺纹T2中,现在我需要s.sendmessage()应该与对象r通信以执行getMessage(字符串msg)。那么我该怎么做...生产者和消费者的方法可能会有所帮助,但是这是一次性的要求,所以真的需要保持共同的队列吗?请帮助我。
条件变量是您想要的。他们允许线程等待(阻止)从另一个线程发送的事件。
您正确地发现,如果只有一个生产者和一个消费者,并且只传递了一个消息,则不需要生产商 - 消费者队列。
因此,您的接收器线程呼叫getMessage(该返回字符串,或以字符串作为参考参数),该参数在内部等待条件变量。然后,在发件人线程中,您通知SendMessage内部的条件变量。这唤醒了接收器线程。
edit :尽管您在问一个特定于Pthread的问题,但PTHREAD等于C 的std :: procention_variable。我建议您使用C 11的实用程序,而不是直接与Pthreads交谈,因为它们易于使用。
编辑2 :您不能使另一个线程执行一些函数。线程之间唯一可以做的就是通信,因此,如果您想在另一个线程中对您在线程中所做的事情进行一些反应,那么另一个线程必须积极等待您触发此事件(通过通知条件变量或类似)。
标准方式将 std::queue
与静音和条件变量结合在一起。静音由条件变量使用并保护队列。接收器等到队列没有空,然后从队列中弹出消息。发件人将消息推到队列中。
当仅需要一种消息时,您可以使用消息队列,如果没有,则可以通过将共享指针发送到消息来使其动态。
相关文章:
- C++一个线程如何正确通信其任务已完成?
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 线程之间的通信不起作用 - C++
- 关于套接字通信的线程
- ZeroMQ:如何使用inproc减少多线程通信延迟
- 用于线程间通信的 Windows 套接字
- 与处理 ZeroMQ 的永久线程与 Qt 通信
- 与非主线程的 GUI 线程通信
- 使用 C++14 和 GLib (GDBus) 的线程通信
- 使用Protobuf进行线程通信
- C 14中的乘数交叉线程通信
- 使用PTHREDS与C 进行线程通信
- Qt中的多线程通信
- 与OpenSSL的多线程通信
- Qt多线程通信
- std::线程通信问题
- Boost:是否存在用于仅线程通信的进程间消息队列机制
- 工作线程如何与主 UI 线程通信
- libuv线程通信
- c++是否有一种方法可以有效地与线程通信而不中断他的工作