加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – TCriticalSection TryEnter方法始终返回True

发布时间:2020-12-15 04:14:13 所属栏目:大数据 来源:网络整理
导读:在TCriticalSection上调用TryEnter方法时,结果始终为true.当然,如果能够获得锁定,这应该只返回true? var MyCritSect: TCriticalSection;begin MyCritSect := TCriticalSection.Create; try // MyCritSect.Enter; Writeln(BoolToStr(MyCritSect.TryEnter,Tru
在TCriticalSection上调用TryEnter方法时,结果始终为true.当然,如果能够获得锁定,这应该只返回true?
var
  MyCritSect: TCriticalSection;

begin
  MyCritSect := TCriticalSection.Create;
  try
    //    MyCritSect.Enter;
    Writeln(BoolToStr(MyCritSect.TryEnter,True)); // This should return True
    Writeln(BoolToStr(MyCritSect.TryEnter,True)); // This should return False?
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName,': ',E.Message);
  end;
end.

即使您取消注释MyCritSect.Enter;对于两次调用TryEnter,它仍然返回True.

我正在使用Delphi XE和Windows 10.

解决方法

关键部分是 re-entrant locks.从 documentation开始:

When a thread owns a critical section,it can make additional calls to EnterCriticalSection or TryEnterCriticalSection without blocking its execution. This prevents a thread from deadlocking itself while waiting for a critical section that it already owns.

如果使用不同的线程,您对TryEnter的调用将失败,并且第一个线程已经拥有该锁.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读