[讨论]请问各位在设计服务端程序的时候,是怎么设计线程同步的呢?

Harryfin 2010-04-19 12:19:29
例如多个线程会竞争多片数据(也就是有多个锁),如何控制好锁的获取和释放,以避免死锁出现呢?

或者说碰到死锁的时候,怎样处理,以让服务继续执行呢?

希望能有具体可行的例子
...全文
152 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
NoImagination 2010-07-08
  • 打赏
  • 举报
回复
你说的情景比较模糊。
首先,死锁问题,加锁不能加永久锁,设置一个超时时间,超时后做补充处理。
再有多线程多资源的匹配,封装式管理。以期限制线程访问资源的范围。
Harryfin 2010-04-27
  • 打赏
  • 举报
回复
顶起来再学习一下
hanzhongliqi 2010-04-24
  • 打赏
  • 举报
回复
我觉得可以用信号量很好的解决这个问题,借助AND型信号量集可以达到要么几个锁一起拿,要么一个不拿,把信号量机制和锁机制结合起来用。
Harryfin 2010-04-23
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 sqldebug_fan 的回复:]

死锁这个问题应该从逻辑捋顺开始,可以试着把流程图画出来,然后在必须的地方加锁,如果害怕死锁,就在最外面加大互斥,会损失效率的。

总感觉这个问题应该捋逻辑。
[/Quote]
我感觉主要是管理锁的机制,我这贴的目的主要就是想讨论这方面的东西
SQLDebug_Fan 2010-04-23
  • 打赏
  • 举报
回复
死锁这个问题应该从逻辑捋顺开始,可以试着把流程图画出来,然后在必须的地方加锁,如果害怕死锁,就在最外面加大互斥,会损失效率的。

总感觉这个问题应该捋逻辑。
haitao 2010-04-23
  • 打赏
  • 举报
回复
不排队也是只能一个线程处理,别的都卡住的
Harryfin 2010-04-23
  • 打赏
  • 举报
回复
现在我的处理方法也是差不多,因为死锁怕了,所以就在实际开始访问的地方加个大互斥算了。不过感觉这样并发太差了。
haitao 2010-04-23
  • 打赏
  • 举报
回复
对,遇到瓶颈,并行也只能排队(串行化到队列)经过
areyouthere19 2010-04-23
  • 打赏
  • 举报
回复
我一般在需要处理数据的地方,弄成一个队列,类似消息队列一样,每次只处理一个。为了加快速度,只有处理数据的时候进去队列(前期预处理完才进入队列),处理完马上从队列中删除。
Harryfin 2010-04-23
  • 打赏
  • 举报
回复
up,请各位高手指点
Harryfin 2010-04-23
  • 打赏
  • 举报
回复
对锁的请求进行排队?这个我考虑过。

我觉得必须要保证锁请求的原子性,也就是要么几个锁一起拿,要么一个不拿。不然一个线程拿了A,一个拿了B,结果就大家都运行不了了。

另外想听听实际开发过的同学们的经验。
火龙岛主 2010-04-23
  • 打赏
  • 举报
回复
可以考虑排队机制!
  • 打赏
  • 举报
回复
是个好问题,应该推荐,学习``````
Harryfin 2010-04-21
  • 打赏
  • 举报
回复
up。。。。
SQLDebug_Fan 2010-04-20
  • 打赏
  • 举报
回复
加锁有个原则:尽可能在最开始需要加锁的地方加锁,完成操作后应该尽可能快解锁,锁里面处理的东西应尽可能少。
cumtiger 2010-04-20
  • 打赏
  • 举报
回复
不懂,等待高手解答
Harryfin 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sanguomi 的回复:]

感觉没说清楚
不清楚你说的 多重互斥是个什么概念
[/Quote]
就是假设有ABC三片数据(三个锁),有些线程会去竞争AB锁,有些线程竞争BC锁,有些线程竞争ABC锁,然后线程才能执行。
sanguomi 2010-04-19
  • 打赏
  • 举报
回复
感觉没说清楚
不清楚你说的 多重互斥是个什么概念
bdmh 2010-04-19
  • 打赏
  • 举报
回复
其实不管你是锁线程还是锁数据,最终的结果就是同一时间只能有一个线程访问数据,访问结束后后面的线程才能读取,如果这样,你为什么不进行互斥呢,一个个的来,没有必要非得弄那些危险的方法
Harryfin 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bdmh 的回复:]

线程不是可以加互斥吗,那样就可以执行完一个操作再执行下一个
[/Quote]
假如是需要存在多重互斥呢? 感觉处理不好就容易死锁
加载更多回复(4)

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧