注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[FreeBSD] signal 的问题  

2010-06-10 11:50:51|  分类: os_FreeBSD |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
signal + multi-thread,真是个烦人的问题。下面的例子,两次给进程发送 SIGUSR1,会发现两次是由不同的 thread 接收到 signal。恩,会带来啥问题呢,下篇文字慢慢道来。
--------------------------------------------------
#include <pthread.h>
#include <signal.h>
#include <unistd.h>

int g_iExit = 0;
pthread_t pid, pid2;

void sig_usr1()
{
        pid2 = pthread_self();
        g_iExit = 1;
}

void* mythr(void *_)
{
        while (1)
        {
                if ( g_iExit )
                        break;
        }
}


int main()
{
        pthread_t pid;
        struct sigaction sa;

        sa.sa_handler = sig_usr1;
        sigemptyset(&sa.sa_mask);
        sa.sa_flags   = 0;
        sigaction(SIGUSR1, &sa, NULL);

        pthread_create(&pid, NULL, mythr, NULL);
        printf("pid = %d\n", pid);
        pthread_join(pid, NULL);
        printf("pid2 = %d\n", pid);

        sleep(100);
        printf("main2 = %d\n", pid2);
        return 0;
}
--------------------------------------------------
$ ./a.out                
main1 = 134557696
pid = 134558720
pid2 = 134558720
main2 = 134557696
--------------------------------------------------
  评论这张
 
阅读(769)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017