2016-05-03 12 views
0

10秒後にセマフォを減らすことができない場合、私のプログラムでスレッドを取得しようとしています(別のスレッドがそれを増やせなかった可能性があります) 私はsem_timedwait()これは、私はネット上で良い例が見つかりません。 だから、僕はこの置き換えたい:sem_timedwait()を正しく使用する方法

sem_timedwait(&full,someTimeStuffThatRepresents10Secs); 
if(sem_timedwaitTookLongerThan10){ 
    pthread.exit(NULL); 
}else{ 
    //do stuff 
} 

すべてのヘルプは高く評価されています。このようなもので

sem_wait(&full); 
//go on with stuff 

を!

+1

[EINVALエラーから保護するためにsem \ _timedwaitのtimespecを正しく設定する方法](http://stackoverflow.com/questions/25254392/how-to-properly-set-timespec-for-sem-timedwaitエラーから保護エラーへの保護) –

答えて

2
/* Calculate relative interval as current time plus 10 seconds */ 

struct timespec ts; 
if (clock_gettime(CLOCK_REALTIME, &ts) == -1) 
{ 
    /* handle error */ 
    return -1; 
} 

ts.tv_sec += 10; 
while ((s = sem_timedwait(&full, &ts)) == -1 && errno == EINTR) 
       continue;  /* Restart if interrupted by handler */ 
/* Check what happened */ 
if (s == -1) 
{ 
    if (errno == ETIMEDOUT) 
     printf("sem_timedwait() timed out\n"); 
    else 
     perror("sem_timedwait"); 
} else 
     printf("sem_timedwait() succeeded\n"); 

のLinuxプログラマーズ・マニュアル(3)

コンソールまたは訪問のドキュメントonlineman sem_timedwaitを入力してください

SEM_WAITで本を徹底的に例を示します。

関連する問題