2011-10-17 36 views
0

为什么我们使用我们什么时候可以使用@synchronize 同时使用线程操作同步多线程操作&。如何同步目标C中的多个线程操作?

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

在此先感谢。

+2

阅读[线程编程指南(http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html)。你的问题非常广泛。 – omz

回答

2

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

考虑@synchronize为递归锁,你传递给它的参数(实例)。如果您想要锁定而没有采用NSLocking或声明ivar,这很有用。

@synchronize不是一个理想的解决方案速度的问题。 pthread_mutex es快几倍,最后我测试了一遍。

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

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

* 与递归互斥一样安全,但@synchronized也会在发生异常时解锁。


如果你只需要知道为什么锁定在简单来说很重要:需要锁定,以防止多个读取或在同一时间写的对象和/或存储。无锁,读,同时可以吹走你的程序的完整性,因为不受保护的读取,读取时写在你的程序中执行任意一点(这将导致不确定的行为,无效的状态,部分更新,可能会出现多个线程编写的,不一致的状态,以及难以分离的崩溃的良好来源)。关于这个主题有一些非常大的解读,但是在较低的层次上锁定和线程化是你想要关注的(而不是专门针对@synchronize的主题)。