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

objective-c – 在多线程编程中使原子成为BOOL标志是否有意义,第1张

概述我对多线程编程很陌生,并想知道它是否正常或者是否有类似的属性 @property BOOL shouldDoIt; //atomic 它将用于在后台调用的循环中 - (void) loop{ // ... do stuff ... if (self.shouldDoIt) { [self doIt]; self.shouldDoIt = NO; 我对多线程编程很陌生,并想知道它是否正常或者是否有类似的属性

@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之后但在重置标志之前将shouldTIt设置为YES.

如果答案是“否”,在这种狭窄的情况下,除了在多cpu配置中,标志可能以另一个线程不会立即看到更改的方式进行高速缓存这一事实之外,您所拥有的就是好的.所以你可能至少想要使用低级别的OSAtomicTestAndClearBarrier()和OSAtomicTestAndSetbarrIEr(),因此你可以尽可能快地获得.

但是,我怀疑你需要这样做.我认为您可能会发现以某种方式重构设计会获得更好的结果,这取决于您在doIt中尝试做什么,做什么以及做更多的事情.

总结

以上是内存溢出为你收集整理的objective-c – 在多线程编程中使原子成为BOOL标志是否有意义全部内容,希望文章能够帮你解决objective-c – 在多线程编程中使原子成为BOOL标志是否有意义所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1011901.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存