我在爲OpenSUSE 12.1開發應用程序。線程 - 同步和睡眠線程拒絕喚醒(LINUX)
此應用程序有一個主線程和其他兩個線程運行相同功能的實例。我試圖用pthread_barrier
同步所有的線程,但我有一些問題:
- 當我把衍生線程睡覺,他們將永遠不會醒來出於某種原因。
- (在我從其他線程中刪除睡眠時,將CPU使用率拋向天空)在某些時間點,所有線程都達到
pthread_barrier_wait()
,但是之後沒有任何線程繼續執行。
這裏有一些僞代碼試圖說明我在做什麼。
pthread_barrier_t barrier;
int main(void)
{
pthread_barrier_init(&barrier, NULL , 3);
pthread_create(&thread_id1, NULL,&thread_func, (void*) ¶ms1);
pthread_create(&thread_id2v, NULL,&thread_func, (void*) ¶ms2);
while(1)
{
doSomeWork();
nanosleep(&t1, &t2);
pthread_barrier_wait(&barrier);
doSomeMoreWork();
}
}
void *thread_func(void *params)
{
init_thread(params);
while(1)
{
nanosleep(&t1, &t2);
doAnotherWork();
pthread_barrier_wait(&barrier);
}
}
創建一個可以編譯一個小例子,或張貼真正相關的代碼。僞代碼可能沒有真實代碼所具有的錯誤/錯誤。 – nos 2012-04-03 17:05:51
您是否正確設置了t1變量? – 2012-04-03 17:28:45
是的,它設置正確。 – 2012-04-03 17:42:18