读书人

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

发布时间: 2012-01-28 22:06:13 作者: rapoo

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

客户端线程代码简要如下:
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.采用心跳方式,如果对端在一段时间(超时)内感知不到对方心跳则退出。

读书人网 >VC/MFC

热点推荐