gpt4 book ai didi

ios - 关于锁的困惑

转载 作者:行者123 更新时间:2023-11-28 20:42:03 24 4
gpt4 key购买 nike

关于锁,有一件事我不确定。我读过 http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html#//apple_ref/doc/uid/10000057i-CH8-SW16但有一件事我不确定; @synchronize(或者通常只是互斥量)是只保护一段代码(比如在方法内部)还是将整个对象作为一个整体锁定?

例如,两个线程处理这些修改数组的方法;

@synthesize m_myMutableArray;

-(void)threadA
{
@synchronized(m_myMutableArray) {
[m_myMutableArray removeAllObjects];
}
}

-(void)threadB
{
NSInteger asdf = 1;
@synchronized(m_myMutableArray) {
[m_myMutableArray addObject:asdf];

}

@synchronized 什么都不做是因为它们是两个独立的代码块,还是在这两种方法中锁定的是同一个互斥量,这意味着 m_myMutableArray 是线程安全的?

谢谢

最佳答案

@synchronized 的“参数”是所谓的 token 或 key ,因此您可以拥有不同的锁定部分。他们只有在拥有相同 token 时才会互相阻止。对象本身没有“锁定”。

因此,如果您有两个 @synchronized(foo) 和两个 @synchronized(bar)foo 部分会相互阻塞但会不要挡住 bar 部分。

如果可能,你应该avoid @synchronized as it's very slow , 由于其动态特性。

关于ios - 关于锁的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8091441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com