Я никогда не писал ничего для цели c, но, насколько я понимаю, вы бы сделали что-то подобное для защиты доступа к вашим данным:
lock = [[NSLock alloc] init];
readData(){
[lock lock];
//read the data here
[lock unlock];
}
writeDate(){
[lock lock];
//write the data here
[lock unlock];
}
Идея состоит в том, чтобы использовать блокировку, чтобы убедиться, что толькоодин поток обращается к данным в любое время.
Если вы выполняете много работы, обрабатывая данные (читая их), возможно, вы захотите сделать копию данных внутри блокировки, а затем выйти из нее.Затем вы можете безопасно использовать копию созданных вами данных, находясь внутри блокировки, не беспокоясь о том, что поток записи изменит ее под вами.
Вы хотите, чтобы время, которое вы заблокировали, было как можно более коротким, поскольку вы потенциально блокируете другой поток и тратите ресурсы впустую, если блокируете на длительные периоды.
Если вы делаете копию данных, вы ДОЛЖНЫ сделать копию внутри замка.