gpt4 book ai didi

objective-c - objective-c - 局部静态变量初始化线程安全吗?

转载 作者:搜寻专家 更新时间:2023-10-30 19:49:06 24 4
gpt4 key购买 nike

注意:我使用的是允许非编译时常量的 objective-c++ ( https://stackoverflow.com/a/12304815/3101492 )

+ (Foo)sharedFoo
{
static Foo *foo = [Foo new];
return foo;
}

静态初始化程序预计只运行一次,但它是否线程安全,如果多个线程同时调用 +(Foo)sharedFoo,是否保证 [Foo new] 只运行一次?

我问是因为如果是这样,那么为什么建议 obj-C 中的单例模式像下面这样使用 dispatch_once?

+ (Foo)sharedFoo {
static Foo *foo = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
foo = [Foo new];
});

return foo;
}

我基本上是在问为什么第一行不能只是

static Foo *foo = [Foo new];

如果我们知道静态局部变量初始化只运行一次,就完全跳过 dispatch_once..

编辑:好的,我找到了答案。1. 首先,我意识到我使用的是 objective-c++,它允许编译上面的代码(并在运行时运行它)2. 其次,编译器将该代码转换为不带 dispatch_once 的单例初始化程序的“原始”版本,这样它确实不是线程安全的。

最佳答案

Is local static variable initialization thread safe?

简答:-

不,它不是线程安全的。

关于objective-c - objective-c - 局部静态变量初始化线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25234325/

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