C++ 如何阻止和唤醒一个boost线程?
如何阻止一个boost线程并将其从另一个线程唤醒?线程正在做一些工作,如果工作完成,它应该阻塞或休眠,如果新工作准备就绪,主线程应该削弱工作线程。我在boost ipc消息队列上尝试了阻塞读取,但这并不是一个高性能的解决方案 大概是这样的:C++ 如何阻止和唤醒一个boost线程?,c++,multithreading,boost,boost-thread,C++,Multithreading,Boost,Boost Thread,如何阻止一个boost线程并将其从另一个线程唤醒?线程正在做一些工作,如果工作完成,它应该阻塞或休眠,如果新工作准备就绪,主线程应该削弱工作线程。我在boost ipc消息队列上尝试了阻塞读取,但这并不是一个高性能的解决方案 大概是这样的: void thread() { uint8_t ret=0; for(;;) //working loop { ret=doWork(); if(ret==WORK_COMPLETE) {
void thread()
{
uint8_t ret=0;
for(;;) //working loop
{
ret=doWork();
if(ret==WORK_COMPLETE)
{
BlockOrSleep();
}
}
}
使用pthreads,我可以阻塞信号量,但这不是平台独立的 这个问题的一个解决方案是a,顾名思义,这是一种在线程中等待直到达到某个条件的方法。这需要线程之间的一些相互合作 根据我上面链接的文档中的示例: 线程1:
boost::条件变量cond;
mutexmut;
bool数据准备就绪;
作废进程_数据();
void wait_for_data_to_process()
{
boost::唯一锁定(mut);
当(!数据准备就绪)
{
等待(锁定);
}
处理_数据();
}
线程2:
void检索_数据();
void prepare_data();
void准备\u数据\u进行\u处理()
{
检索_数据();
准备_数据();
{
boost::lock_guard lock(mut);
数据_ready=true;
}
第二,通知某人;
}
boost::condition_variable cond;
boost::mutex mut;
bool data_ready;
void process_data();
void wait_for_data_to_process()
{
boost::unique_lock<boost::mutex> lock(mut);
while(!data_ready)
{
cond.wait(lock);
}
process_data();
}
void retrieve_data();
void prepare_data();
void prepare_data_for_processing()
{
retrieve_data();
prepare_data();
{
boost::lock_guard<boost::mutex> lock(mut);
data_ready=true;
}
cond.notify_one();
}