C列表多线程同步

时间:2019-05-11 18:50:41

标签: c multithreading list synchronization

我有一个多线程的C服务器-客户端TCP项目。 每个线程(主线程除外)负责单个客户端,并且我有一个全局列表,其中包含有关每个客户端的信息(套接字文件描述符等)。 当有新的客户端连接时,主线程总是将新节点添加到列表中(此线程将新元素添加到列表的开头)。 所有其他线程执行以下操作:

  • 他们经常扫描列表以获取所有客户端的套接字描述符,以便将某些数据“广播”到所有客户端

  • 当客户端断开连接时,负责的线程将删除列表中客户端的节点

哪种同步方法最适合此问题? 我已经考虑过为每个节点设置一个互斥锁,如果线程需要从列表中间删除一个节点,它将阻塞3个互斥锁(正在删除的节点的互斥锁以及相邻节点的互斥锁) 。但是我还在某个地方看到条件变量适用于多线程列表。

注意:我想要一个不会阻塞整个列表的解决方案,这使得其他线程无法访问

谢谢

0 个答案:

没有答案