【发布时间】:2018-08-31 08:44:27
【问题描述】:
我们希望保证静态变量的线程安全。 我们在@synchronized 指令中使用了另一个静态变量作为对象。像这样:
static NSString *_saveInProgressLock = @"SaveInProgressLock";
static BOOL _saveInProgress;
+ (BOOL)saveInProgress {
@synchronized(_saveInProgressLock) {
return _saveInProgress;
}
}
+ (void)setSaveInProgress:(BOOL)save {
@synchronized(_saveInProgressLock) {
_saveInProgress = save;
}
}
我们在商店中当前的应用程序中遇到问题,可以通过阻止将 _saveInProgress 变量设置为 NO 来重现该问题。 看到上面的代码有什么问题吗?
与此有何不同?
static BOOL _saveInProgress;
+ (BOOL)saveInProgress {
@synchronized([MyClass class]) {
return _saveInProgress;
}
}
+ (void)setSaveInProgress:(BOOL)save {
@synchronized([MyClass class]) {
_saveInProgress = save;
}
}
【问题讨论】:
标签: objective-c multithreading static thread-safety synchronized