信号处理程序正在陷入僵局

时间:2015-09-16 11:26:38

标签: signals deadlock

我正在开发一个应用程序,我每隔1秒调用一个函数。但该计划陷入僵局,我无法找到根本原因。这是我的示例代码




  #include< stdio.h>
 #include< stdlib.h>
 #include< time。 h>
 #include< pthread.h>
 #include< unistd.h>
 #include< signal.h>

 pthread_mutex_t loc;
 pthread_t StartProcessThread;
 void fun(int t);
 void * vStartProcess(void *);

 int main()
 {
 bool t = true;
 struct itimerspec TimerSpec;
 struct sigaction sa;

 timer_t timerId;

 int nResult = pthread_mutex_init(& loc,NULL);
如果(nResult!= 0)
 {
 perror(“无法初始化ReportedTrackListLock互斥锁\ n”);
出口(EXIT_FAILURE);
 }

 nResult =在pthread_create(安培; StartProcessThread,NULL,vStartProcess,NULL);
 if(nResult!= 0)//检查是否成功创建了线程,如果没有退出
 application
 {
 printf(“创建StartProcessThread线程时出错...退出应用程序\ n”);
出口(EXIT_FAILURE);
 }

 TimerSpec.it_interval.tv_sec = 1;
 TimerSpec.it_interval.tv_nsec = 0;
 TimerSpec.it_value.tv_sec = 1;
 TimerSpec.it_value.tv_nsec = 0;

 sa.sa_handler =安培;乐趣;
 sa.sa_flags = 0;
 sigemptyset(安培; sa.sa_mask);

的sigaction(SIGALRM,&安培; SA,NULL);

 long a = timer_create(CLOCK_REALTIME,NULL,& timerId);
如果(一个!= 0)
 {
 printf(“创建计时器时出错...退出应用程序\ n”);
出口(EXIT_FAILURE);
 }
 a = timer_settime(timerId,0,(const itimerspec *)& TimerSpec,NULL);
如果(一个!= 0)
 {
 printf(“设置定时器时出错...退出应用程序\ n”);
出口(EXIT_FAILURE);
 }
 pthread_join(StartProcessThread,NULL);
}


 void fun(int t)
 {
 printf(“来到这里\ n”);
的pthread_mutex_lock(安培; LOC);
睡眠(2);
调用pthread_mutex_unlock(安培; LOC);
 printf(“来到这里1 \ n”);
}

 void * vStartProcess(void *)
 {
 printf(“thread created \ n”);& #xA; bool t = true;
而(T)
 {
的pthread_mutex_lock(安培; LOC);
睡眠(1);
调用pthread_mutex_unlock(安培; LOC);
 }
返回NULL;
}
  




有人请帮我解决这个问题




0 个答案:

没有答案