请教tcriticalsection,mutex的区别 ( 积分: 200 )

  • 主题发起人 主题发起人 nanami
  • 开始时间 开始时间
N

nanami

Unregistered / Unconfirmed
GUEST, unregistred user!
我想知道,在两个不同的线程中间是否能使用TCriticalSection来保护共享数据?
例如:
crsDB : TCriticalSection;
线程1:TRecvObj
procedure TRecvObj.execute;
begin
crs.enter;
//访问数据库
crs.leave
end;

线程2:TSendObj
procedure TSendObj.execute;
begin
crs.enter;
//访问数据库
crs.leave
end;

在线程1访问数据库的时候是不是线程2就不访问了?
另外,用mutex和用TCriticalSection的区别主要是什么?
 
我想知道,在两个不同的线程中间是否能使用TCriticalSection来保护共享数据?
例如:
crsDB : TCriticalSection;
线程1:TRecvObj
procedure TRecvObj.execute;
begin
crs.enter;
//访问数据库
crs.leave
end;

线程2:TSendObj
procedure TSendObj.execute;
begin
crs.enter;
//访问数据库
crs.leave
end;

在线程1访问数据库的时候是不是线程2就不访问了?
另外,用mutex和用TCriticalSection的区别主要是什么?
 
你的代码没问题, 临界区和互斥量的区别是:
互斥量是一种内核对象,占用的cpu时间长点,效率低点,
但可以同步不同进程中的线程;临界区则相反。
 
mutex 是windows内核对象,可以跨进程使用,由操作系统管理生存期
TCriticalSection 不是windows内核对象 高效一点,由进程自己管理。
 
我总感觉TCriticalSection好像不能防止同时访问共享数据。。。
感觉好像死锁。
 
TCriticalSection本身没问题。
只有一个资源不可能死锁,死锁发生多个线程循环锁定多个资源的情况下。
 
谢谢你的回答,btw:
那事件和临界区有什么不同啊?
 
多人接受答案了。
 
后退
顶部