锁和对象一起封装的危险
在多线程编写中,绝大多数编码风格喜欢把锁和要访问的对象封装在同一个对象,释放对象的时候也释放锁,这样会造成死锁。我们写一个测试例子,我们创建一个锁,把锁锁住,然后再创建一个线程,一直不停的等待锁返回,然后我们把锁释放,这时线程就死锁,代码如下:
定义接口:
type TLockObject = class; TLockTestThread = class; TForm1 = class(TForm) btn1: TButton; mmoLockThreadTest: TMemo; procedure btn1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private FLockTestThread: TLockTestThread; FLockObject: TLockObject; public { Public declarations } end; TLockTestThread = class(TThread) private FLockObject: TLockObject; public procedure Execute; override; procedure AddLockLog; property LockObject: TLockObject read FLockObject write FLockObject; end; TLockObject = class(TObject) private FLock: TCriticalSection; public constructor Create; virtual; destructor Destroy; override; procedure Lock; procedure UnLock; end; var Form1: TFor
DELPHI中锁和对象分离解决并发死锁

本文探讨了在多线程编程中,将锁和对象封装在一起可能导致的死锁问题,并通过实例说明。为了解决这个问题,提出了锁与对象分离的策略,详细介绍了如何在DEPHI的IOCPDemoSvr例子中实现这一策略,以提高并发处理的性能和稳定性。
最低0.47元/天 解锁文章
5644

被折叠的 条评论
为什么被折叠?



