C ++线程:如何向其他长生命线程发送消息?

时间:2016-03-30 16:48:11

标签: multithreading c++11

我有一个服务器正在侦听某个端口,我创建了几个分离的线程。

不仅自己的服务器将永远运行,而且分离的线程也将永远运行。

//pseudocode
void t1_func()
{
   for(;;)
   {
     if(notified from server)
         dosomething();
   }
}
thread t1(t1_func);
thread t2(...);
for(;;)
{
  // read from accepted socket
  string msg = socket.read_some(...);
  //notify thread 1 and thread 2;
}

由于我不熟悉多线程,我不知道如何在服务器中实现这样的nofity,在分离的线程中实现check the nofity

任何有用的提示将不胜感激。

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用std::condition_variablestd::condition_variable会等到另一个线程调用它上面的notify_onenotify_all,然后才会唤醒它。

以下是使用条件变量实现的t1_func

std::condition_variable t1_cond;
void t1_func()
{
    //wait requires a std::unique_lock
    std::mutex mtx;
    std::unique_lock<std::mutex> lock{ mtx };
    while(true)
    {
        t1_cond.wait(lock);
        doSomething();
    }
}

wait方法需要std::unique_lock,但不必共享锁来通知线程。当你想从主线程中唤醒工作线程时,你可以像这样调用notify_onenotify_all

t1_cond.notify_one();

如果您希望在一段时间后唤醒线程,可以使用wait_for代替wait