我有数据(“unsigned char data [480] [640] [4]”)和 两个线程
thisThread1FunctinIsCalledForExampleAbout50CallsPerSecond() { 填充(数据); //它填充了数据 }
thisThread2FunctionIsCalledAbout1TimePerSecond() { 使用(数据); //并且它使用数据(不仅读取而且还处理它们)
}
我是多线程的新手,我面临一个基本问题: 我这里有“竞争条件” - 线程1更改并“破坏”数据,而线程2'使用'它们 - 我应该怎么做才能阻止它?
tnx的答案,对不起我的弱英语
答案 0 :(得分:1)
我从未在目标c中写过任何内容,但我的理解是你会做这样的事情来保护对数据的访问:
lock = [[NSLock alloc] init];
readData(){
[lock lock];
//read the data here
[lock unlock];
}
writeDate(){
[lock lock];
//write the data here
[lock unlock];
}
我们的想法是使用锁来确保任何时候只有一个线程正在访问数据。
如果您在处理数据(读取数据)时做了大量工作,那么您可能希望在锁内复制数据,然后退出锁。然后,您可以安全地使用在锁内部创建的数据副本,而不必担心写入线程会在您下面更改它。
您希望尽可能缩短锁定的时间,因为如果您长时间锁定,可能会阻止其他线程并浪费资源。
如果您复制数据,则必须在锁内复制。