C 在多个线程中共享一个结构

C 在多个线程中共享一个结构,c,multithreading,irc,C,Multithreading,Irc,我正在用C写一个小的IRC程序,我在用线程处理多个客户端, 我使用链表来存储每个客户端的fd。因此,如果一个客户端发送消息,它将被写入其他客户端的fd上 我不确定这是最好的方法,你能给我一些建议吗 另外,通过这种方式,我需要在整个线程中共享结构(其中包含每个客户端的文件描述符),因此如果某个线程中有更新,它将更新其他线程的结构。我想知道如何才能做到这一点,我如何才能共享该结构 欢迎任何帮助。如果不了解您的设计,很难评论您的FD链接列表是否合适 在线程之间共享数据结构方面,您无需执行任何操作。线程

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

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

另外,通过这种方式,我需要在整个线程中共享结构(其中包含每个客户端的文件描述符),因此如果某个线程中有更新,它将更新其他线程的结构。我想知道如何才能做到这一点,我如何才能共享该结构


欢迎任何帮助。

如果不了解您的设计,很难评论您的FD链接列表是否合适

在线程之间共享数据结构方面,您无需执行任何操作。线程共享内存空间,因此在一个线程中可见的任何内容都将在另一个线程中可见。您唯一的风险是有多个线程同时修改结构,这是您通过使用互斥信号量(mutex)来防止的


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

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

  • 每个通道一个输入队列
  • 每个客户端一个输出队列
每当客户端线程接收到消息时,它都会将其发布到通道线程。当一个频道收到一个新帖子时,它会将其转发给所有客户端。每个通道和客户机都可以表示为
结构
,然后可以由线程处理(每个线程有一个或多个客户机或通道)

所有队列都是使用
pthread\u mutex\u t
保护的简单链表。当函数需要访问它们时,它会锁定队列、添加消息并解锁


您为哪个O/S编写消息?好吧,我不需要对共享结构thanx做任何事情。但是,如果没有链接列表,您如何将消息写入fd列表???每个线程都可以保存自己的列表副本,然后根据需要向其他线程发送消息。或者您可以有一个主线程,它知道所有其他线程,并处理所有线程的数据进出。或者您可以完全避免线程,这可能会使任务更整洁。有很多方法可以解决您的问题,但哪种方法最好取决于您试图实现的目标:-)我只想创建一个具有两个通道的irc,当用户a发送消息时,消息将发送给同一通道中的每个人。好的,谢谢。最后一个问题,您知道我是否可以使用SDL创建客户端?(仅用于显示)