c ++ pthread条件信号

时间:2013-12-03 11:11:40

标签: c++ multithreading pthreads

我正在使用pthread在C ++中进行多线程处理。我的问题是我使用网络摄像头的帧来执行特征提取。特征提取例程大约需要4-5秒来执行任务。但是,我希望视频流继续并等待来自特征提取例程的信号告知发送另一帧。我认为这里有两个功能,但我不确定它的实现。功能包括: pthread_cond_wait pthread_cond_signal

我的课程大纲如下:

void *makefeature(void * arg){
// compute future using surf
//HERE I WANT TO SIGNAL TO THE MAIN THAT I AM DONE SEND A NEW FRAME NOW
}

int main(){
// All video streaming functions and all
pthread_create(); //! call to make feature routine
}

如何实现pthread_cond_wait的2实例和pthread_cond_signal.Please帮助

1 个答案:

答案 0 :(得分:1)

独立于使用哪个库,条件变量的概念是1个线程在阻塞状态下等待条件改变,因此它不必轮询它。由于您希望您的流式传输器继续运行,因此每次都可以轮询该条件,因此您只需要一个互斥锁来同步条件。

如此表现:

doExtraction(Frame);
mutex.lock();
Ready = true;
mutex.unlock();  // can be avoided with RAII

流光:

while(true)
{
  doStreaming();
  bool localReady;
  mutex.lock();
  localReady = Ready;
  Ready = false;
  mutex.unlock();
  if (localReady) prepareFrame();
}

你可能想要一个条件变量来将帧传递给提取器线程。