iOS多线程学习小记『GCD的API之dispatch_once』

3.2.12 dispatch_once

dispatch_once 函数是保证在应用程序执行中执行一次指定处理的API。下面这种经常出现的用来进行初始化的源代码可通过dispatch_once函数简化。

    static int  initialized = NO;
    
    if (initialized == NO) {
        /**
         初始化
         */
        initialized = YES;
    }
    

如果使用dispatch_once 函数,则源码写为:

    static dispatch_once_t pred;
    dispatch_once(&pred, ^{
        /**
         初始化
         */
    });

源代码看起来没有太大变化,但是通过dispatch_once函数,该源码即使在多线程环境下执行,也可保证百分之百安全。

之前的源代码字大多数情况下也是安全的。但是在多核CPU中,在正在更新表示是否初始化的标志变量时读取,就有可能多次执行初始化处理。而使用dispatch_once函数初始化就不必担心这样的问题。这就是所说的单利模式,在生成单例对象时使用。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容