2014-09-03 27 views
-1

我創造了許多線程都等待有自己的條件。每個線程在運行時發出下一個條件並再次進入等待狀態。是否有類似於pthread_cond_timedwait的定時信號?

但是,我希望當前正在運行的線程應該在指定的時間段(非常短的時間)之後發出其下一個條件。如何實現這一目標?

void *threadA(void *t) 
{ 
    while(i<100) 
    { 
     pthread_mutex_lock(&mutex1); 
     while (state != my_id) 
     {   
      pthread_cond_wait(&cond[my_id], &mutex1); 
     } 
     // processing + busy wait 

     /* Set state to i+1 and wake up thread i+1 */ 
     pthread_mutex_lock(&mutex1); 
     state = (my_id + 1) % NTHREADS;//usleep(1); 

     // (Here I don't want this sleep. I want that this thread completes it processing and signals next thread a bit later.) 
     /*nanosleep(&zero, NULL);*/ 

     pthread_cond_signal(&cond[(my_id + 1) % NTHREADS]); // Send signal to Thread (i+1) to awake 

     pthread_mutex_unlock(&mutex1); 
     i++; 

    } 

回答

1

信令的情況下不什麼如果有什麼等待條件。所以,如果pthread'x'信號條件'cx'然後等待它,它會等待很長時間...除非其他線程也發出信號'cx'!

我不太清楚我是否明白pthread指示它的「下一個條件」是什麼意思,但是在我看來,等待發出一個等待線程和線程正在休眠之後沒有什麼區別發信號?

+0

我的當前線程(可以說0)等待條件0,而線程1等待條件1。 現在在處理線程0之後,我想要發信號給condition1,以便線程1可以恢復,但是在信號發送之前,我想要安排另一個進程(即,我想稍等一會)。在我現在的代碼中,我僱用了睡眠。但在這種情況下,睡眠結束後,當前線程將被調度,稍後它將發出下一個線程的信號。我不想要這個。 – vibhor 2014-09-04 11:27:59

+0

嗯......在處理和繁忙等待之前缺少一個'pthread_mutex_unlock()'如果你不想在當前線程(例如0)中延遲踢下一個線程(線程1)之前,那麼我建議你在線程喚醒的時候加入延遲,如果你不想在任何線程中執行延遲,那麼你需要一個輔助線程給予線程1的支持,並且在適當的時候這樣做當然, – 2014-09-04 15:31:55

+0

是的,這就是我在想什麼,你能幫我解決這個問題嗎? 此外,事情是我在一個非常細化的層面上工作,我不想浪費CPU週期來做這件事,所以我想要一個外部進程發信號線程。是否有可能? – vibhor 2014-09-04 16:08:29

相關問題