【发布时间】:2016-07-26 10:33:47
【问题描述】:
我想在我的主线程的另一个线程中打破sleep (3)。为此,我想使用raise (sig) 并在中断该系统调用后继续代码。
那么,我应该使用哪个信号来触发sleep 并返回EINTR?
我写到现在的代码:
void *event_loop (void *threadid)
{
int rc;
long tid;
do{
rc = sleep(20);
printf ("return from sleep with %d", rc);
fprintf(stderr, "Value of errno: %d\n", errno);
} while (errno == EINTR);
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld! = %d\n", tid);
}
void main(int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
int sig=SIGABRT ; // which signal???
int i=0;
printf("Main THREAD\n");
for(t=0;t<2;t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, event_loop, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
sleep(2);
printf("rasing signal now from main thread...\n");
raise(sig);
pthread_exit(NULL);
}
【问题讨论】:
-
经典XY problem。你到底想做什么?
-
我附加的程序应该是解释,我尝试通过raise()生成EINTR
-
我改写了你的问题,所以它传达了你想要解决的实际问题。
-
你不需要信号,信号和线程不能很好地满足你的需求。而是在谷歌上搜索
pthread_cond_wait()。