1

我最近一直在研究线程套接字服务器。不幸的是,我还没有找到用户可以私信或私信另一个的代码。由于每个都是通过一个线程连接的,我一直在寻找一种方法来修改线程的变量而没有任何乐趣。我是否必须创建一个全局变量来保存每个线程解析的所有消息(使用互斥锁)?

4

1 回答 1

0

是的,您需要某种受互斥体保护的共享数据结构。

它不需要是全局的,但所有连接处理线程都需要对它的引用。全局可以实现这一点,但是在主线程中分配的数据结构也是如此,对它的引用在创建时传递给每个线程。

假设您的线程被写入阻塞它们正在读取的套接字,那么当有新的(内部)消息给它们时,棘手的部分将是唤醒它们。解决这个问题的最简单方法可能是pipe()为每个线程创建一个,并让线程阻塞在select()它们正在处理的套接字和它们的管道上。然后,您可以通过管道向他们发送私人消息,共享数据结构只会查找连接的用户并找到他们管道的文件描述符。

于 2013-01-17T03:16:48.357 回答