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

时间:2013-04-19 13:17:03

标签: c multithreading irc

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

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

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

欢迎任何帮助。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

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

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