Her bir iş parçacığı varsayılan olarak ilişkili bir gönderme sırasına sahip midir? Sadece her bağlamda dispatch_semaphore
s kullanıp kullanamayacağımı ya da tanımlanmış bir sırayla açık bir gönderim çağrısına sarmam gerekip gerekmediğini merak ediyorum.Her NSThread otomatik olarak bir gönderim kuyruğuna sahip midir?
cevap
Sorunuzun gerçekten ima ettiği şekilde çalışmıyor. Varsayılan olarak, ana iş parçacığıyla ilişkili bir ana dağıtım sırası ve eşzamanlı olan üç genel sıra (sırasıyla yüksek, varsayılan ve düşük öncelikler) vardır.
Eşzamanlı sıralar, belirli bir iş parçacığıyla ilişkilendirilmek yerine kendi iş parçacığı kaynaklarını yönetir.
Aslında, dispatch_queue_create()
man sayfasında oldukça spesifik diyor ki:
“Kuyruklar eşzamanlı çalıştırabilir yürütme ve bağımsız kuyruklar gönderilen blokların herhangi bir spesifik konuya bağlı değildir.”
Gönderim semaforlarını gönderim sıralarının dışında kullanabileceğinize (sorunuzun diğer kısmı) ilişkin cevabınız evet, yapabilirsin. Mach semaforlarının üzerine uygulandılar ve her yerde çalışmalılar. Kodu burada görebilirsiniz:
http://opensource.apple.com/source/libdispatch/libdispatch-84.5.5/src/semaphore.c