- 论坛徽章:
- 0
|
测试了 一下你说的情况
环境 fedora 14
代码- using namespace std;
- pthread_mutex_t mmutex=PTHREAD_MUTEX_INITIALIZER;
- void* handler1(void* vp)
- {
- pthread_mutex_lock(&mmutex);
- int i;
- for(i=0;i<100;i++){
- sleep(1);
- cout<<"this is thread A....."<<endl;
- }
- pthread_mutex_unlock(&mmutex);
- }
- void sig_handler(int signo)
- {
- pthread_mutex_lock(&mmutex);
- int i;
- for(int i=0;i<100;i++){
- sleep(1);
- cout<<"this is handler A......."<<endl;
- }
- pthread_mutex_unlock(&mmutex);
- signal(15,sig_handler);
- }
- main()
- {
- signal(15,sig_handler);
- pthread_t p;
- pthread_create(&p,NULL,handler1,NULL);
- pthread_join(p,NULL);
- pthread_mutex_destroy(&mmutex);
- }
复制代码 先运行 这个 程序 然后另外开一个窗口 执行 ps aux | grep XXX
得到相关的进程号
kill -15 进程号
我的结果是:
先执行 完线程函数 handler1
再执行 信号函数 sig_handler
如果 把锁去掉 两个函数一起执行 输出信息交替打印。
以上说明 如果线程在跑,这个时候来了一个信号,相当于主程序多了一段可执行代码。
属于正常竞争 ,不会出现楼主说的中断,等等。属于正常竞争。 |
|