我试图让我的程序中的线程停止,如果它不能在10秒后减少信号量(另一个线程可能或不能增加它) 我看到我可以使用sem_timedwait(),但我在网上找不到一个好的例子。 所以我只想替换它:
sem_wait(&full);
//go on with stuff
有这样的事情:
sem_timedwait(&full,someTimeStuffThatRepresents10Secs);
if(sem_timedwaitTookLongerThan10){
pthread.exit(NULL);
}else{
//do stuff
}
感谢任何帮助!
答案 0 :(得分: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程序员手册在
上给出了详尽的示例SEM_WAIT(3)
请在控制台中输入man sem_timedwait
或访问文档online。