gpt4 book ai didi

delphi - TriticalSection TryEnter 方法始终返回 True

转载 作者:行者123 更新时间:2023-12-03 15:12:10 25 4
gpt4 key购买 nike

在 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 的调用将会失败。

关于delphi - TriticalSection TryEnter 方法始终返回 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34196128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com