如何在目标C中同步多个线程操作?

时间:2011-10-17 17:35:46

标签: objective-c multithreading ios4

为什么我们使用同步多线程操作&什么时候可以使用@synchronize 使用线程操作时。

这可能是一个愚蠢的问题,我需要理解线程的概念。请帮助理解。

提前致谢。

1 个答案:

答案 0 :(得分:2)

  

为什么我们使用同步多线程操作

@synchronize视为传递给它的参数(实例)的递归锁。如果您想要锁定而不采用NSLocking或声明ivar,这将非常有用。

@synchronize不是速度很重要的理想解决方案。 pthread_mutex es快几倍,最后我测试过。

  

...什么时候我们可以在使用线程操作时使用@synchronize。

它的功能类似于递归互斥锁。因此,在程序流程中的任何一点引入它都是安全的。为对象请求多个锁(通过@synchronize)也是安全的;它是递归的,如果你从同一个线程获得两次对其参数的锁定,它就不会死锁。

* 和递归互斥锁一样安全,但如果抛出异常,@synchronized也会解锁。


如果您只是需要知道为什么锁定在简单方面很重要:需要锁定以防止同时对对象和/或内存进行多次读取或写入。没有锁定,同时从多个线程读取和写入可能会破坏程序的完整性,因为程序执行中的任何一点都可能发生不受保护的读写操作(这将导致未定义的行为,无效状态,读取时部分更新,不一致状态,以及难以隔离的崩溃的良好来源)。关于这个主题有一些相当大的读物,但是你想要关注的是较低级别的锁定和线程(而不是@synchronize特有的主题。)