我正在使用 C、pthreads 和套接字在 Linux 中编写应用程序。
这将是客户端-服务器应用程序,服务器将有 N+2 个线程,其中 N - 活动客户端的数量,一个用于接受新连接并为客户端创建线程的线程,最后一个将接受用户输入。
我将使用链表来保存一些与我的应用程序相关的数据,每个客户端都会在我的列表中关联一个节点。这些客户端线程会以一定的时间间隔更新存储在其节点中的信息,可能是一秒,也可能是两分钟,它会动态变化。
现在问题来了,如果用户请求它,存储在链表中的信息需要写入标准输出。当然,在写作期间我应该获得互斥锁。我担心整个列表的一个互斥锁会阻碍性能。
我正在考虑将互斥锁与每个节点相关联,但这会使删除某些指定节点变得复杂(首先,我需要确保“stdout writer”线程不会遍历列表,我还需要获取互斥锁我的节点和前一个节点更改指向下一个节点的指针,依此类推——要么我需要一直遍历到前一个节点,要么我需要制作双链表)。
所以我想知道涉及多个互斥锁的解决方案是否会更好,代码、条件和所有这些锁定、等待和解锁都更加复杂。