max*_*ax_ 82 cocoa-touch objective-c ios
我刚刚创建了一个单例方法,我想知道函数的@synchronized()作用,因为我经常使用它,但不知道其含义.
Joh*_*eek 114
它声明了代码块周围的关键部分.在多线程代码中,@synchronized保证在任何给定时间只有一个线程可以在块中执行该代码.
如果您不知道它的作用,那么您的应用程序可能不是多线程的,您可能不需要使用它(特别是如果单例本身不是线程安全的).
编辑:添加一些2011年原始答案中没有的信息.
该@synchronized指令防止多个线程进入受引用同一对象的@synchronized指令保护的任何代码区域.传递给@synchronized指令的对象是用作"锁定"的对象.如果使用不同的对象作为锁,则两个线程可以位于相同的受保护的代码区域中,并且您还可以使用与锁相同的对象来保护两个完全不同的代码区域.
此外,如果您碰巧nil作为锁定对象传递,则根本不会进行锁定.
Dur*_*n.H 26
该@synchronized指令是在Objective-C代码中动态创建互斥锁的便捷方式.
该@synchronized指令执行任何其他互斥锁将执行的操作 - 它可以防止不同的线程同时获取相同的锁.
句法:
@synchronized(key)
{
// thread-safe code
}
Run Code Online (Sandbox Code Playgroud)
例:
-(void)AppendExisting:(NSString*)val
{
@synchronized (oldValue) {
[oldValue stringByAppendingFormat:@"-%@",val];
}
}
Run Code Online (Sandbox Code Playgroud)
现在上面的代码是完全线程安全的..现在多个线程可以更改值.
以上只是一个不起眼的例子......
@synchronized块自动为您处理锁定和解锁.@synchronize您有一个与您用于同步的对象关联的隐式锁.这里有关于这个主题的非常丰富的讨论,请关注如何在Objective-C中@synchronized锁定/解锁?
| 归档时间: |
|
| 查看次数: |
73732 次 |
| 最近记录: |