Какова семантика потоков для операций с файлами Какао?например, NSData методы чтения / записи - PullRequest
0 голосов
/ 14 октября 2010

Если у меня есть два потока в моем приложении Какао и (скажем), я читаю из файла X на диске с NSData +dataWithContentsOfFile:, и другой поток одновременно обновляет или заменяет тот же файл Xскажете -writeToPath:atomically:?

Я не знаю, каковы стандартные режимы чтения / записи файла Cocoa.Может ли операция чтения увидеть повреждение файла?Если так, то каков стандартный способ обойти это?Использовать функции POSIX для эффективного разрешения нескольких читателей, но только одного монопольного писателя?

Спасибо за понимание, которое связывает мое понимание между API Какао и базовой файловой системой.

1 Ответ

1 голос
/ 14 октября 2010

Может ли операция чтения увидеть поврежденный файл?

Нет, если вы установите atomically на YES. То, что он делает, это записывает данные во временный файл, а затем переписывает место назначения с временным файлом. Это атомарно (в любом случае в локальных файловых системах), потому что это просто быстрое редактирование каталога.

Чтение может получить только часть данных, если вы должны были немедленно начать запись в намеченный пункт назначения и еще не завершили, т. Е. Вы передали atomically:NO. Поэтому в подобных случаях не делайте этого - передайте YES.

...