2013-01-13 19 views
1

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

回答

0

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

它不需要是全局的,但所有的连接处理线程都需要引用它。一个全局可以完成这个任务,但是在主线程中分配的数据结构也是如此,并且在创建每个线程时都会引用它。

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