我最近一直在钻研线程套接字服务器。不幸的是,我还没有找到用户可以PM或另一个私人消息的代码。由于每个都通过一个线程连接,我一直在寻找一种方法来修改线程的变量,没有任何乐趣。我是否必须创建一个全局变量来保存每个线程解析的所有消息(使用互斥锁)?
答案 0 :(得分:0)
是的,您需要某种共享数据结构,受互斥锁保护。
它不需要是全局的,但所有连接处理线程都需要对它的引用。全局可以实现这一点,但主线程中分配的数据结构也是如此,并且在创建时将对它的引用传递给每个线程。
假设您的线程被写入他们正在读取的套接字上的阻塞,当有新的(内部)消息时,棘手的部分将唤醒它们。解决这个问题的最简单方法可能是为每个线程创建一个pipe()
,并让线程在select()
上阻塞它们正在处理的套接字及其管道。然后,您可以通过管道向他们发送私人消息,共享数据结构将只是查找连接的用户并找到他们的管道的文件描述符。