【问题标题】:@synchronized(self) block at multiple places for multiple resources in multithreaded environment , objective c@synchronized(self) 在多线程环境中的多个位置阻止多个资源,目标 c
【发布时间】:2017-02-11 07:51:03
【问题描述】:

是否从一个线程锁定一个函数,阻止所有其他线程尝试在不同函数中获取锁定。

我们可以使用 gcd 来访问下面提到的关键部分,只是想知道 @synchronized(self) 是如何工作的。 例如。

在 writeString() 中的 @synchronized(self){ } 中执行时,只有 writeString() 调用的多个线程会被阻塞吗?

或 当在 writeString() 中的 @synchronized(self){ } 中执行时,所有使用 @synchronized(self){} 调用同一类函数的线程(例如readDataFromFile())都会被阻塞?

-(void)writeString:(NSString*)string forObj:(id)obj 
{
    @synchronized(self)
    {
        [obj write:string];
    }
}

-(void)readDataFromFile:(NSString*)file
{
    @synchronized(self)
    {
        [self read];
    }
}

【问题讨论】:

  • 欢迎来到 Stackoverflow!您无需在问题正文中复制标题。
  • 您需要出示您的代码。相同的self 还是不同的self
  • @shweta 是否属于同一类无关紧要。是同一个instance吗?

标签: objective-c multithreading synchronization locking self


【解决方案1】:

@synchronized(A) 可以被认为是一个锁,A 标识要使用的锁。

如果您将 A 的相同值传递给对 @synchronized() 的两次调用,那么它们将使用相同的锁并且是互斥的。如果您为两个调用传递两个不同的值,那么它们不会是互斥的。

【讨论】:

    猜你喜欢
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    相关资源
    最近更新 更多