我有一个iOS类,它在单独的线程中进行一些计算,而主线程显示允许用户取消计算的提醒。计算线程使用几个可从主线程和计算线程访问的实例变量。计算线程只读取这些变量,并且主线程在计算线程存在时不写入或读取这些变量。我需要使用NSLock吗?
我的问题是,我需要锁定这些变量?
我有一个iOS类,它在单独的线程中进行一些计算,而主线程显示允许用户取消计算的提醒。计算线程使用几个可从主线程和计算线程访问的实例变量。计算线程只读取这些变量,并且主线程在计算线程存在时不写入或读取这些变量。我需要使用NSLock吗?
我的问题是,我需要锁定这些变量?
只要有一个线程可以访问它们,不需要锁定它们。尽管如此,尝试这种做法可能是一种好的做法,如果您想从主线程访问它们,那么现在就做这件事会有好处。
不,你没有。您只需锁定变量,如果它们将被一次写入多个线程并从中读取。
同意凯文,你应该计划未来的变化,以防你需要访问它们。
仅供参考,我不会使用警报,因为它会阻止主视图。我推荐一个活动指示器视图以及一个允许它们取消的额外按钮。
您可以在每个常规输入控件(按钮,分段控件等)中进行检查以确保该应用程序“不处理”以接受输入。
- (IBAction)someOtherButtonPressed:(id)sender {
if(processingFlag == NO) {
// allow handling of input
}
else {
// alert or other message indicating the app is processing
}
}
感谢您的回答。 “只要只有一个线程可以访问它们...”我通过访问来假设你的意思是阅读。如果两个线程都读取变量是必需的锁定?也许我更常见的问题是锁是否可以用于超越同步的任何目的?我对线程有点新,并且已经看到关于线程陷阱的各种警告,所以我非常仔细地踩踏。 – user1060816
如果所有线程*只读*,不锁定它不应该导致任何问题。如果任何一个线程写入它,所有线程都应该锁定它,以便读取和写入。 – Kevin