是的,您需要某种受互斥体保护的共享数据结构。
它不需要是全局的,但所有连接处理线程都需要对它的引用。全局可以实现这一点,但是在主线程中分配的数据结构也是如此,对它的引用在创建时传递给每个线程。
假设您的线程被写入阻塞它们正在读取的套接字,那么当有新的(内部)消息给它们时,棘手的部分将是唤醒它们。解决这个问题的最简单方法可能是pipe()
为每个线程创建一个,并让线程阻塞在select()
它们正在处理的套接字和它们的管道上。然后,您可以通过管道向他们发送私人消息,共享数据结构只会查找连接的用户并找到他们管道的文件描述符。