日期:2014-05-16  浏览次数:20778 次

怎么在一个线程中指定休眠或唤醒另一个线程?
我最近在线一个聊天的程序,遇到点问题。
客户端有两个线程:A和B。服务器发送一个消息到客户端,这两个线程都有接收的功能,但是我想让A接收消息而阻塞B不让他接收,大家有什么办法吗?谢谢!
------解决方案--------------------
那么线程B用来做什么的?两个线程都有接收功能,又要A优先于B,那么就要确保A先接收,B在A接收的情况下才接收?
如果是,就让B来判断A的接收状态就可以了。
------解决方案--------------------
是所有的消息都是让A先接收 还是只是这个一个消息让A先接收呢?

为什么不开一个线程来介绍消息呢?然后解析不同的请求不同的线程处理呢?
------解决方案--------------------
可以设计一个公共接收接口,A/B线程均可调用。然后在函数体内部添加判断:当前运行线程是指定线程(这里是A线程)的时候才接收。片段:

//假定其他地方已经启动了线程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线程,继续接收
     .............
     
}