iOS 앱이 그래픽 스레드에서 오디오 스레드로 데이터를 전송해야합니다. 이러한 데이터 묶음 (합성 될 사운드를 나타냄)은 오디오 스레드가 오디오 스레드에서 작동 할 준비가 될 때까지 저장해야합니다. 명백한 데이터 구조는 그래픽 스레드가 헤드에 푸시하고 오디오 스레드가 테일에서 풀 (pull)하는 대기열입니다. 오디오 스레드는 실시간으로 실행되며 모든 잠금 장치는 가청 글리치를 유발할 수 있습니다. 잠금없이이를 수행 할 수있는 스레드로부터 안전한 방법이 있습니까?Objective-C의 잠금없는 메시지 대기열
이미 performSelector : onThread : withObject : waitUntilDone을 사용해 보았습니다. 오디오 스레드에는 연관된 실행 루프가 없기 때문에 이것이라고 생각합니다.
나는 여기에 AC 배열 기반 링 버퍼와 같은 것을 만들 수 있는데, 내 메시지에 대한 포인터를 보유 할 것입니다. 생산자 스레드가 쓰기 헤드를 이동시키고 소비자 스레드는 판독 헤드의 이동 료. 어떻게 그런 것들이 실제로 thread-safe한지 확인할 수 있습니까? The wikipedia on non-blocking algorithms은 저레벨 (어셈블리) 코드를 사용하지 않고 lockless 링 버퍼를 구현할 수 있다고 언급하지만, 실제로 구현하고있는 스레드가 실제로 스레드인지 확인하기 위해 스레드가 시스템의 제어를 공유하는 방법에 대한 내 자신의 이해가 충분하지 않습니다. -안전한.
나는 이것을 시도 할 것이다. NSOperationQueue를 동시성 1로 설정하여 효과적으로 직렬 대기열을 생성 할 수 있습니다. –