使用PTHREDS与C 进行线程通信

Thread communication with in C++ using pthreds

本文关键字:线程 通信 PTHREDS 使用      更新时间:2023-10-16

有两个线程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与静音和条件变量结合在一起。静音由条件变量使用并保护队列。接收器等到队列没有空,然后从队列中弹出消息。发件人将消息推到队列中。

当仅需要一种消息时,您可以使用消息队列,如果没有,则可以通过将共享指针发送到消息来使其动态。