我正在开发iphone应用,但这可能是一个普遍的问题。
我有一个单例模型类,并且会出现多个NSOperations(线程)存在并使用单例对象的情况。如果他们都在这个对象中调用相同的方法,我是否需要一些锁定机制?
或者这种方法一次只能执行一次吗?
我没有计算机科学背景,但我的猜测是所有线程都将CALL转到同一地址(此方法)。您还可以推荐一本讨论通用编程概念的优秀初学者编程书。对于Knuth有点书,我没有大脑。
答案 0 :(得分:1)
基本上,如果数据是MODIFIED,你只需要担心同步(即使只有一个“线程”修改它,其余的只读它)。如果一个或多个线程确实修改了单例中的数据(或单例引用的任何数据),那么您需要某种算法来处理数据争用(开发人员应该坚持“锁定”基于algorthims)。对于多个线程共享的所有数据都是如此,而不仅仅是单个线程。
函数与问题无关(虽然函数通常会更改数据,但相同的函数会更改相同的数据,并在多个线程上调用时读取相同的数据)。如果函数是'const'函数(即不能/不会修改任何数据,那么调用多个线程是安全的,只要没有别的东西触及函数读取的数据)。
答案 1 :(得分:0)
拥有单例并不能解决多线程访问的问题。
根据数据的性质及其更新方式,您可能需要使用某种锁定机制来保护数据。