我想寫一個多線程的代碼,但我有一個小問題。 在我的程序中,我有兩種類型的線程,探索者(我有4個或5個)和main(我有其中之一)。我想讓所有的探索者線程同時運行,當他們完成主線程開始工作時。有一個循環,我做了以上的事情一遍又一遍。由於創建線程的開銷,我決定在main運行時讓探索者線程休眠,並在完成時喚醒它(當然反之亦然)。爲了實現這個目標,我使用了障礙。下面是我的線程的僞代碼:線程在pthread停止工作後一些改動
主線程功能:
void* main(void* arg)
{
while(true)
{
wait_for_barrier_1
do_your_job
reset_barrier_1
wait_for_barrier_2
}
}
探險線程函數
void* explorers(void* arg)
{
while(true)
{
do_your_job
wait_for_barrier_1
if(thread_id == 0)
{
reset_barrier_2
}
wait_for_barrier_2
}
}
barrier_1用於防止主運行結束探險之前,和barrier_2使用在結束main之前阻止探險家。
我的問題是這段代碼不能正常工作。在開始時它工作正常,但經過兩三次迭代後,一些瀏覽器線程突然停止工作,所以整個程序將停止工作。
我無法弄清楚,特別是因爲沒有規則的迭代次數。在一些運行中,它會在第一次迭代之後停止,而在另一些運行中它可以正常工作,直到第5次或第6次。
順便說一下,我使用的是Mac OSX。
信號量,也許... –
我們確實需要看到實際的代碼。 –