Я ищу способ убедиться, что некоторые строки кода всегда выполняются вместе (до того, как система может переключить поток).iOS Thread safety - Завершите блок кода перед переключением нитей
@synchronized не работает для этого, насколько я знаю, поскольку он будет блокировать другой поток, чтобы войти в этот определенный блок. В моем примере у меня разные части кода, которые влияют друг на друга, и я хочу убедиться, что каждый из них блокирует другой.
Как это можно достичь?
EDIT: Один случай использования может состоять в том, что я воспроизвожу файл midi. События автоматически выходят из потока с высоким приоритетом. При прохождении отдельных событий игрок может быть остановлен пользователем. Я хочу убедиться, что одна заметка обрабатывается полностью или что плеер остановлен раньше, и заметки не исчезают.
Если у вас есть несколько «частей кода», которые блокируют друг друга, моя первая попытка состоит в том, чтобы каждый из них был в блоке @synchronize. Что не так с этим подходом? –
Можете ли вы уточнить? Понятие «до того, как система может переключить поток», не имеет смысла, поскольку сама идея потоков заключается в том, что они работают одновременно друг с другом (поэтому вы используете @synchronized (или другие блокирующие механизмы) или выделенные последовательные очереди для control [synchronization] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html#//apple_ref/doc/uid/10000057i-CH8-SW1) общих ресурсов Ваш вопрос может быть более ясным, если вы были менее абстрактны и вместо этого описывали именно то, что вы пытаетесь сделать. – Rob
Я добавил пример использования:) – Max