如何在多线程环境中访问全局变量?

时间:2014-01-22 01:22:33

标签: objective-c multithreading properties

如何在多线程环境中访问全局变量?例如:以下messageServerUrl变量如何保持线程安全?它足够原子以保证安全吗?如果没有,还有其他解决方案吗?任何想法请分享,提前谢谢。

@property(atomic,copy)NSString * messageServerUrl;

1 个答案:

答案 0 :(得分:1)

atomic并没有神奇地保留一些线程安全的东西。它只是一个线程安全的访问器方法。

非常非常小心是什么使共享价值安全(有时甚至不是!)。如果你从一个让你的逻辑处于危险中的方式从两个不同的线程中访问相同的值,你仍然可能会认真对待你的生活。

例如,如果你知道在辅助线程开始之前设置了这个值,那么你之后所做的就是使用getter,那么是的,这可能是安全的。

但是,在多个线程之间共享数据的最安全方法是:不要。如果不需要更改数据,则在开始时将其传递给辅助线程。这就是GCD如此精彩的原因:默认情况下它是串行队列,而且你继续将数据传递到下一个线程上执行的块中,这样你就可以获得没有锁的有效锁定(这很容易管理不善)。