如何锁定简单的字节数组

时间:2011-04-16 12:32:07

标签: multithreading ios concurrency

我有数据(“unsigned char data [480] [640] [4]”)和 两个线程

thisThread1FunctinIsCalledForExampleAbout50CallsPerSecond() {     填充(数据); //它填充了数据 }

thisThread2FunctionIsCalledAbout1TimePerSecond() {    使用(数据); //并且它使用数据(不仅读取而且还处理它们)

}

我是多线程的新手,我面临一个基本问题: 我这里有“竞争条件” - 线程1更改并“破坏”数据,而线程2'使用'它们 - 我应该怎么做才能阻止它?

tnx的答案,对不起我的弱英语

1 个答案:

答案 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];
}

我们的想法是使用锁来确保任何时候只有一个线程正在访问数据。

如果您在处理数据(读取数据)时做了大量工作,那么您可能希望在锁内复制数据,然后退出锁。然后,您可以安全地使用在锁内部创建的数据副本,而不必担心写入线程会在您下面更改它。

您希望尽可能缩短锁定的时间,因为如果您长时间锁定,可能会阻止其他线程并浪费资源。

如果您复制数据,则必须在锁内复制。