首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎么防止TCriticalSection死锁

2012-02-13 
如何防止TCriticalSection死锁?我在多线程中主线程建立了TCriticalSection,然后传给多线程,并在多个地方使

如何防止TCriticalSection死锁?
我在多线程中主线程建立了TCriticalSection,然后传给多线程,并在多个地方使用了这个东西,却容易发生死锁,这个东西怎么使用啊?我是新手。

[解决办法]
记得加锁后要释放,一般容易突略的是发生异常忘记解锁了.
[解决办法]
在加锁的时候有一个非常重要的问题

就是A线程占用锁的时候 B已经得到数据,要使用锁
这个时候会造成程序忙等
容易down掉
我开发的时候就碰到这个问题

避免的方法是

写入锁尽量少做操作
直接丢掉一个vector或者list中
马上释放锁
而操作锁也不要做操作
只是将数据读取出来
马上释放锁
然后开始操作读取出来的数据

当然也可以参考holyfire的一篇关于并发控制的文章
http://www.libing.net.cn/read.php/1072.htm

[解决办法]
比如 我以我的程序架构为例:
MainThread使用TUDPServer等待数据到来
使用一个TCriticalSection *cs;
在OnUDPServerData的时候
cs-> Enter();
//PushData to list
cs-> Leave();

对于操作数据的地方:
cs-> Enter();
//Copy List Data to New List
cs-> Leave();
//Execute List Data

当然可能仅仅上面的操作都不足与能够帮你解决锁的问题
你需要在OnUDPServerData的时候 做一些初判断 丢弃一些数据

热点排行