0

我正在 CI 中编写一个小型 IRC 程序,使用线程来处理多个客户端,并且我使用链表来存储每个客户端的 fd。因此,如果客户端发送消息,它将被写入其他客户端的 fd .

我不确定这是最好的方法,你能给我一些建议吗???

另外,通过这种方式,我需要在整个线程中共享结构(包含每个客户端的文件描述),所以如果线程中有更新,它将为其他人更新结构。我想知道如何我能做到这一点,我怎么能分享那个结构?

欢迎任何帮助。

4

2 回答 2

1

在不了解您的设计的更多信息的情况下,很难评论您的 FD 链接列表是否合适。

在线程之间共享数据结构方面,您无需做任何事情。线程共享内存空间,因此在一个线程中可见的任何内容都将在另一个线程中可见。您唯一的风险是您有多个线程一次修改结构,您可以通过使用互斥锁(互斥信号量)来防止这种情况。

由于您使用的是 Linux,我假设您使用的是 POSIX 线程 ( pthreads ),在这种情况下,您需要查看pthread_mutex_函数。

于 2013-04-19T13:26:07.493 回答
0

在您的设置中,我会使用:

  • 每个通道一个输入队列,
  • 每个客户端一个输出队列。

每当客户端线程接收到消息时,它都会将其发布到通道线程。当频道收到新帖子时,它会将其重新发布给所有客户。每个通道和客户端都可以表示为struct,然后可以由线程处理(每个线程具有一个或多个客户端或通道)。

所有队列都是简单的链表,使用pthread_mutex_t. 当一个函数需要访问它们时,它会锁定队列、添加消息并解锁。

于 2013-04-19T17:30:51.003 回答