Rim*_*ire 0 delphi multithreading freepascal lazarus
此代码线程是否安全,或者在执行InterLockedDecrement之前是否可以通过另一个线程更改FCount?
procedure TMyObject.Wait;
begin
if FCount > 0 then
InterLockedDecrement(FCount);
..
end;
Run Code Online (Sandbox Code Playgroud)
它不是线程安全的.
但我认为该代码专门用于防止降低FCount到零以下.
您可能需要考虑以下内容:
if InterlockedDecrement(FCount) < 0 then
InterlockedIncrement(FCount);
Run Code Online (Sandbox Code Playgroud)
这样,两个并发线程中的一个将值减小为-1,然后"修复其错误".
但是,它确实具有FCount可能暂时存在的副作用< 0.