我有一个多线程的C服务器-客户端TCP项目。 每个线程(主线程除外)负责单个客户端,并且我有一个全局列表,其中包含有关每个客户端的信息(套接字文件描述符等)。 当有新的客户端连接时,主线程总是将新节点添加到列表中(此线程将新元素添加到列表的开头)。 所有其他线程执行以下操作:
他们经常扫描列表以获取所有客户端的套接字描述符,以便将某些数据“广播”到所有客户端
当客户端断开连接时,负责的线程将删除列表中客户端的节点
哪种同步方法最适合此问题? 我已经考虑过为每个节点设置一个互斥锁,如果线程需要从列表中间删除一个节点,它将阻塞3个互斥锁(正在删除的节点的互斥锁以及相邻节点的互斥锁) 。但是我还在某个地方看到条件变量适用于多线程列表。
注意:我想要一个不会阻塞整个列表的解决方案,这使得其他线程无法访问
谢谢