我们可以从差异线程安全地读取/更新布尔值吗?

时间:2017-09-08 11:50:55

标签: delphi firemonkey

我们可以从差异线程安全地读取/更新布尔值吗?我的意思是操作原子?我想知道所有平台(android,ios,macos,linux,windows)

我想要做的是使用布尔var作为标志。类似的东西:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { DataTableDemo1 } from './demo1/data-table-demo1'
import {  DataTableDemo3 } from './demo3/data-table-demo3'
import { DataTableModule } from 'angular-4-data-table';

@NgModule({
  declarations: [
    AppComponent,
  DataTableDemo1,
  DataTableDemo3,
    FooComponent
  ],
  imports: [
    BrowserModule,
    DataTableModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

1 个答案:

答案 0 :(得分:4)

该代码在任何平台上都不是原子的。

您需要使用其中一个原子内在函数,如AtomicCmpExchange或等效TInterlocked.CompareExchange。请注意,这些操作数在32位或64位操作数上运行,因此您可能需要切换到LongBool

尽管如此,原子操作可能不是解决问题的正确方法。也许正确的解决方案是使用同步原语。鉴于这个问题,我们几乎不可能判断出这个问题。我想说的是,我刚刚回答了这个问题,“这是原子的”。我绝对不是说你问题的解决方案是原子比较/交换功能。