在 Swift 中,为什么惰性静态变量的初始化是线程安全的?是如何实现的?

问题描述 投票:0回答:1

Swift 如何实现惰性静态变量分配/求值的线程安全?所有调用都经过的所有静态变量访问是否有一些全局锁?

swift concurrency static
1个回答
0
投票

全局变量使用

swift_once
进行初始化。

swift_once

@convention(thin) (Builtin.RawPointer, @convention(thin) () -> ()) -> ()

用于延迟初始化全局变量。第一个参数必须 指向一个字大小的内存位置,该位置在以下位置初始化为零 进程开始。引用内存是未定义的行为 已初始化为非零或写入 当前进程生命周期中除

swift_once
之外的任何内容。 第二个参数引用的函数将被运行 在进程启动和函数之间的时间内恰好一次 返回。

在 Darwin 平台上,这基本上是

dispatch_once_f
的包装。据我所知,
dispatch_once_f
不使用“全局锁”。两个全局变量的初始化可以同时发生。

© www.soinside.com 2019 - 2024. All rights reserved.