gpt4 book ai didi

objective-c - 在多线程编程中使 atomic 成为 BOOL 标志是否有意义

转载 作者:太空狗 更新时间:2023-10-30 03:52:58 25 4
gpt4 key购买 nike

我是多线程编程的新手,想知道它是否可以或制作类似的属性

@property BOOL shouldDoIt; //atomic

将在后台调用的循环中使用

- (void) loop{
// ... do stuff ...
if (self.shouldDoIt) {
[self doIt];
self.shouldDoIt = NO;
}
// ... do more stuff ...
}

并在从主线程调用的方法中更改

- (void) methodCalledFromMainThread{
self.shouldDoIt = YES;
}

让它成为原子的还是它不会改变任何东西?我知道与非原子相比,原子速度较慢,我的程序需要更快的速度,但如果不使用原子,那么执行 if (shouldDoIt){ 可能会失败?

最佳答案

答案完全取决于问题的答案:

“每次主线程设置 shouldDoIt 标志时,您是否需要恰好运行一次 doIt?”

如果该问题的答案是"is",那么您的代码将无法运行,因为主线程可能会在您启动 doIt 后将 shouldDoIt 设置为 YES 但在您重置标志之前。

如果答案是“否”,在这种狭隘的情况下,除了在多 CPU 配置中,标志可能以其他线程不会立即看到的方式缓存改变。所以你可能至少想使用 OSAtomicTestAndClearBarrier()和 OSAtomicTestAndSetBarrier() 是低级别的,因此尽可能快。

但是,我怀疑您是否需要这样做。我认为您可能会发现以某种方式重构设计会获得更好的结果,具体取决于您在 doItdo stuffdo more stuff< 中尝试做什么

关于objective-c - 在多线程编程中使 atomic 成为 BOOL 标志是否有意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4462431/

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