1
我在我的c代碼中使用pthreads。我在我的主例程中創建並啓動一個線程(THREAD_1),從THREAD_1開始,我調用例程來創建兩個新線程(THREAD_2,THREAD_3)。所有這三個線程將在毫秒級並行運行,並在條件循環中休眠。在滿足某個條件後,我想停止/退出兩個線程(THREAD_2,THREAD_3),然後是THREAD_1。 這樣做的最好方法是什麼?使用條件變量停止運行pthreads的最佳方法
我在我的c代碼中使用pthreads。我在我的主例程中創建並啓動一個線程(THREAD_1),從THREAD_1開始,我調用例程來創建兩個新線程(THREAD_2,THREAD_3)。所有這三個線程將在毫秒級並行運行,並在條件循環中休眠。在滿足某個條件後,我想停止/退出兩個線程(THREAD_2,THREAD_3),然後是THREAD_1。 這樣做的最好方法是什麼?使用條件變量停止運行pthreads的最佳方法
while(true){
apr_thread_mutex_lock(mySharedObject->getMutex());
while (mySharedObject->getMessagesReady() == 0 && !mySharedObject->getEndThread()) {
apr_thread_cond_wait(mySharedObject->getCond(), mySharedObject->getMutex());
}
if (mySharedObject->getEndThread()){
apr_thread_mutex_unlock(mySharedObject->getMutex());
break;
}
apr_thread_mutex_unlock(mySharedObject->getMutex());
if (mySharedObject->getMessagesReady()>0){
myActiveProducer->send();
}
}
這是我實施它的方式。有問題??
所有線程是否執行相同的條件?如果是的話,如果在任何線程中都滿足條件,那麼你想退出所有的線程? – Jay
@Jay:其實我想先結束(THREAD_2和THREAD_3),然後是THREAD_1。之後,我想重新啓動我的主程序,我想再次啓動THREAD_1,從而啓動THREAD2和THREAD_3 – Devb