如何在一个线程中指定休眠或唤醒另一个线程


背景及问题:


在线一个聊天的程序,客户端有两个线程:A和B。服务器发送一个消息到客户端,这两个线程都有接收的功能,想让A接收消息而阻塞B不让他接收。


办法:


1. 线程B用来做什么的?两个线程都有接收功能,又要A优先于B,那么就要确保A先接收,B在A接收的情况下才接收?
如果是,就让B来判断A的接收状态就可以了。


2. 可以设计一个公共接收接口,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线程,继续接收
     .............
}