AtomicExchange 需要 Integer 或 NativeInt 变量,但我如何使用它(或类似的东西)以线程安全的方式设置布尔值 - 或者是否需要它?
DelphiBoolean是字节值,不能与 Atomic API 一起使用,因为它们对 32 位值进行操作。
您可以使用BOOL32 位布尔值代替,如下所示:
var
b: bool;
begin
b := False;
// true
AtomicIncrement(Integer(b));
// false
AtomicDecrement(Integer(b));
Run Code Online (Sandbox Code Playgroud)
然而,递增有点危险,因为递增两次(类似于分配 True 两次)并递减一次意味着该值 > 0,因此仍然True。
另一种选择可能是这样的:
// false
AtomicExchange(Integer(b), Integer(False));
// true
AtomicExchange(Integer(b), Integer(True));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1504 次 |
| 最近记录: |