1.背景
在调试一个项目的时候(ps:项目是cs模式),客户机发过来的命令服务器没有响应,命令阻塞
2.过程
调试的时候发现命令处理线程在阻塞在一个cmd处理上,cmd在等待数据处理线程返回。这两个线程使用unix socket通讯
gdb收集到的信息有:
1.命令处理线程read unix socket,没有收到数据,所以阻塞
2.数据处理线程阻塞在condition wait上
3.解决
在review代码的时候发现数据处理线程确实有cond_wait ,从设计上将数据处理线程不应该有阻塞点,否则会影响其他数据处理。
但这不是重点,重点是cond_wait 的队列同时被两个线程调用,而队列没有锁保护。
方案,队列操作在由消费线程处理。