shareO: 非线程安全,因为如果两个线程同时访问,就不是创建一个了。
share1: 线程安全,加入了同步锁,线程安全,当时过程都是串行运行的的,并且同步锁消耗额外的资源;
share2: 线程安全,这个比share1性能搞了点,使用了两个if判断,但是代码复杂;
shared : 线程安全,最优的写法;
一个token和block代码块,这个函数必然会执行的,且线程安全;
常常: 对于只需要执行一次的块来说,每次调用函数时,传入的标记都必须完全相同。因此开发者通常标记变量声明在static 或者gloabal作用域;线程安全是由GCD底部完成的;
由于每次调用时,都必须使用完全相同的标记,所以标记要声明成static。这样在复用的时候都会用这个变量而不是新的;dispatch_once 这个方法不用加锁,函数采用了原子访问(atomic access)来查询标记,以判断其所对应的代码原来是否执行过。
网友评论