Ses yazımı yazarken, internetteki birçok kişi bellek ayırma veya engelleme kodunu kullanmamanın, yani kilitlerin kullanılmaması gerektiğini belirtir. Bunlar deterministik olmayan bir durum olduğundan, çıktı tamponunun yetersiz kalmasına ve sesin bozulmasına neden olabilir.Multithreaded Realtime ses programlama - Engellemek veya engellemek için
I video yazılımı geç zaman, genel olarak, her iki kullanmak, yani öbek video çerçeveleri ayrılması ve kilit ve koşullu değişkenleri (sınırlı tamponlar) kullanılarak parçacıkları arasında geçen. Her işlem için ayrı bir iş parçacığı olarak kullanılabilen gücü seviyorum, yazılımın en iyi performansı veren çekirdeklerin her birini maksimize etmesini sağlarım.
Ses ile benzer bir şey yapmak istiyorum, ancak iş parçacıkları arasında belki 100 örnek kareler geçiyor, ancak iki sorun var.
Bellek ayırma kullanmadan çerçeveleri nasıl oluştururum? Önceden tahsis edilmiş bir çerçeve havuzunu kullanabileceğimi sanıyorum, ama bu karışık görünüyor.
Kilit serbest kuyruğu kullanabileceğinizi biliyorum ve bu desteğin bunu yapmak için güzel bir kütüphanesi vardır. Bu, iş parçacıkları arasında paylaşım yapmanın harika bir yoludur, ancak verilerin kullanılabilir olup olmadığını görmek için sıraya sürekli bir şekilde oylama yapmak, CPU zamanının büyük bir beline benziyor.
Muteks kullanımıyla ilgili deneyimimde, muteksin kilitlendiği bölümün kısa olması şartıyla, aslında çok fazla zaman almaz.
İş parçacıkları arasında geçen ses çerçevelerini elde etmenin en iyi yolu, gecikmeyi minimumda tutmak, kaynakları israf etmemek ve göreceli olarak az belirleyici olmayan davranış kullanmaktır?
Ses konusunda pek bir şey bilmiyorum, fakat geleneksel bir üretici/tüketici problemi gibi geliyor, semafor saymaya baktınız mı? – smskelley
Konuya ihtiyacınız var mı? Ses verileri videodan çok daha ucuzdur. – immibis
@immibis, iş parçacığınızda ne yaptığınıza bağlı. Video genellikle piksel başına çok az işlem gerçekleştirirken, ses sentezi örnek başına çok zorlu olabilir. –