- 论坛徽章:
- 0
|
先把代码附上。我觉得我的代码应该没有问题。但在td1_fn中的pause总是不返回。
如果在信号处理函数中打印进程ID,发现是main函数的进程ID。正确么?
问题出在哪里?
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <signal.h>
void sig_alarm(int signo)
{
}
void *td1_fn(void *arg)
{
printf("fn 1: tid: %u\n", pthread_self());
if(signal(SIGALRM, sig_alarm) == SIG_ERR) {
printf("signal error\n");
return (void*)1;
}
alarm(1);
pause();
alarm(0);
printf("fn 1 return\n");
return (void*)0;
}
void *td2_fn(void *arg)
{
printf("fn 2, tid: %u\n", pthread_self());
printf("fn 2 return\n");
return;
}
int main(void)
{
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, td1_fn, NULL);
pthread_create(&tid2, NULL, td2_fn, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
exit(1);
}
|
|
|