C 语言中的 volatile 关键字是什么?

67 阅读1分钟

image.png

一句话回答

告诉编译器,这个变量 a 随时会改变,别把跟它相关的计算操作优化掉了,不然会出问题的。编译器就只能乖乖地在做完全部计算工作,在计算需要 a 时,永远会读取它当前的数值。

@implementation SomeObject {
  volatile bool done; // 使用 volatile 关键字
}

- (void)someMethod {
  done = false;

  // 开启了一些子线程去执行任务,完成后将 done 设置为 true
  // 如果子线程任务没执行完,会进入这个循环等待
  while (!done) {
    //  10ms 后检查一遍
    [[NSRunLoop currentRunLoop] 
      runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]
    ];
  }
}
@end

参考资料