Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中与线程通信+;使用pThres_C++_Multithreading - Fatal编程技术网

C++ 在C+中与线程通信+;使用pThres

C++ 在C+中与线程通信+;使用pThres,c++,multithreading,C++,Multithreading,有两个线程T1和T2 class Sender{ public: void sendMessage(); }; class Reciever{ public: void getMessage(string msg); }; 假设发送方S在线程T1中,接收方R在线程T2中,现在我需要S。sendMessage()应该与对象R通信以执行getMessage(string msg)。那么我该怎么做呢。。。生产者和消费者的方法可能会有所帮助,但这是

有两个线程T1和T2

class Sender{
      public:
      void sendMessage(); 
};

class Reciever{
      public:
      void getMessage(string msg); 
};
假设发送方S在线程T1中,接收方R在线程T2中,现在我需要S。sendMessage()应该与对象R通信以执行getMessage(string msg)。那么我该怎么做呢。。。生产者和消费者的方法可能会有所帮助,但这是一次性的要求,所以真的需要维护一个公共队列吗?请帮帮我。

就是你要找的。它们允许线程等待(阻塞)从另一个线程发送的事件

如果只有一个生产者和一个消费者,并且只传递了一条消息,则您正确地识别出不需要生产者-消费者队列

因此,接收方线程调用getMessage(它应该返回一个字符串,或者将该字符串作为一个引用参数),它在内部等待一个条件变量。然后,在发送者线程中,通知sendMessage中的条件变量。这将唤醒接收器线程

编辑:尽管您询问的是pthread特定的问题,但pthread有一个等价于C++的std::condition_变量。我建议您使用C++11的实用程序,而不是直接与pthread对话,因为它们更易于使用


编辑2:您不能让另一个线程执行某些功能。线程之间唯一可以做的事情是通信,因此如果您想在另一个线程中对您在线程中所做的事情做出某种反应,那么另一个线程必须主动等待您触发此事件(通过通知条件变量或类似事件).

标准方法将
std::queue
与互斥体和条件变量组合在一起。互斥锁由条件变量使用并保护队列。接收方等待队列不为空,然后从队列中弹出消息。发送方将消息推送到队列中

当只需要一种类型的消息时,可以使用消息队列,如果不需要,则通过向消息发送共享指针使其成为动态的

“那么我该怎么做……”这是一个非常广泛的问题。实现这种通信机制的方法有很多。例如,您应该查找生产者/消费者消息队列。