首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

问一个线程同步退出的有关问题

2012-01-28 
问一个线程同步退出的问题!现在有一个程序,即做客户端又做服务器端!并且客户端是一个线程,服务器端是一个

问一个线程同步退出的问题!
现在有一个程序,即做客户端又做服务器端!
并且客户端是一个线程,服务器端是一个线程.

客户端线程代码简要如下:
void   *clientthrd(void   *)
{
        fd   =   socket(...);
        ...;
        connect(...);
        send(fd,...);
        close(fd);
}

服务器端线程代码简要如下:
void   *serverthrd(void   *)
{
        fd   =   socket(...);
        bind(fd,...);
        listen(fd,...);
        while(1)   {
                connfd   =   accept(fd,...);
                recv(fd,&msgbuf,   sizeof(msgbuf));
                close(connfd);
                handle(msgbuf);
        }
}

现在我想在进程退出时(接收到SIGTERM信号)同时退出这两个子线程,并且关闭相应的监听套接字(fd)和连接套接字(connfd).
因为在服务器端的accept和客户端的recv函数会阻塞所以退出起来有些麻烦,我现在想用pthread_mutex在两个线程中锁住fd,connfd,然后在signal处理函数中用pthread_mutex+close来关闭,但绝得需要把fd,connfd设置为全局变量,并且锁定范围比较大,大家有什么好方法?

平台最好是linux,说说windows上的方法也可以.

[解决办法]
1.采用握手的方式,在结束后通知对端退出;
2.采用心跳方式,如果对端在一段时间(超时)内感知不到对方心跳则退出。

热点排行