-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++;
}
我的當前線程(可以說0)等待條件0,而線程1等待條件1。 現在在處理線程0之後,我想要發信號給condition1,以便線程1可以恢復,但是在信號發送之前,我想要安排另一個進程(即,我想稍等一會)。在我現在的代碼中,我僱用了睡眠。但在這種情況下,睡眠結束後,當前線程將被調度,稍後它將發出下一個線程的信號。我不想要這個。 – vibhor 2014-09-04 11:27:59
嗯......在處理和繁忙等待之前缺少一個'pthread_mutex_unlock()'如果你不想在當前線程(例如0)中延遲踢下一個線程(線程1)之前,那麼我建議你在線程喚醒的時候加入延遲,如果你不想在任何線程中執行延遲,那麼你需要一個輔助線程給予線程1的支持,並且在適當的時候這樣做當然, – 2014-09-04 15:31:55
是的,這就是我在想什麼,你能幫我解決這個問題嗎? 此外,事情是我在一個非常細化的層面上工作,我不想浪費CPU週期來做這件事,所以我想要一個外部進程發信號線程。是否有可能? – vibhor 2014-09-04 16:08:29