Мое приложение для iOS должно отправлять данные из графического потока в аудио поток. Эти наборы данных (представляющие звуки, подлежащие синтезу) необходимо хранить до тех пор, пока аудиопоток не будет готов воздействовать на них. Очевидная структура данных, которую нужно использовать, - это очередь, в которой графический поток выдвигается к голове, а звуковой поток - к хвосту. Аудиопоток работает в режиме реального времени, и любые блокировки могут привести к слышимым сбоям. Есть ли потокобезопасный способ сделать это без блокировок?
Я уже пытался выполнить executeSelector: onThread: withObject: waitUntilDone без удачи. Я думаю, что это потому, что аудио поток не имеет связанного цикла выполнения.
Мне кажется, я мог бы создать что-то вроде кольцевого буфера на основе массива переменного тока, который бы содержал указатели на мои сообщения, где поток производителя будет отвечать за перемещение головки записи, а поток потребителя будет отвечать перемещения прочитанной головы. Как я могу гарантировать, что такая вещь на самом деле является потокобезопасной? Википедия по неблокирующим алгоритмам упоминает кольцевые буферы без блокировки как реализуемые без использования низкоуровневого кода (ассемблера), но я не достаточно уверен в своем собственном понимании того, как потоки совместно используют управление машиной для убедитесь, что то, что я реализую, на самом деле поточно-ориентировано.