当前位置: 技术问答>linux和unix
怎么在一个线程中指定休眠或唤醒另一个线程?
来源: 互联网 发布时间:2017-05-06
本文导语: 我最近在线一个聊天的程序,遇到点问题。 客户端有两个线程:A和B。服务器发送一个消息到客户端,这两个线程都有接收的功能,但是我想让A接收消息而阻塞B不让他接收,大家有什么办法吗?谢谢! ...
我最近在线一个聊天的程序,遇到点问题。
客户端有两个线程:A和B。服务器发送一个消息到客户端,这两个线程都有接收的功能,但是我想让A接收消息而阻塞B不让他接收,大家有什么办法吗?谢谢!
客户端有两个线程:A和B。服务器发送一个消息到客户端,这两个线程都有接收的功能,但是我想让A接收消息而阻塞B不让他接收,大家有什么办法吗?谢谢!
|
可以设计一个公共接收接口,A/B线程均可调用。然后在函数体内部添加判断:当前运行线程是指定线程(这里是A线程)的时候才接收。片段:
//假定其他地方已经启动了线程A 和B
//假定其他地方已经启动了线程A 和B
pthread_t pid_a;
pthread_t pid_b;
int custom_recv(...)
{
//////////判断当前线程是否是A 线程
pthread_t current_thread = pthread_self();
//非A 线程,稍作休眠,退出
if(!pthread_equal(current_thread,pid_a))
{
sleep(1);
return 0;
}
//A线程,继续接收
.............
}
|
那么线程B用来做什么的?两个线程都有接收功能,又要A优先于B,那么就要确保A先接收,B在A接收的情况下才接收?
如果是,就让B来判断A的接收状态就可以了。
如果是,就让B来判断A的接收状态就可以了。
|
是所有的消息都是让A先接收 还是只是这个一个消息让A先接收呢?
为什么不开一个线程来介绍消息呢?然后解析不同的请求不同的线程处理呢?
为什么不开一个线程来介绍消息呢?然后解析不同的请求不同的线程处理呢?