Çalışmaları/engelleme işlemlerinde bulunan birkaç işçiye TBB görevleri arasında çalışmak (void*
) için hızlı bir iş parçacığı iletişim mekanizmasına ihtiyacım var. Şu anda pipe()
+ libevent
kullanıyorum. Intel Threading Building Blocks ile daha hızlı ve daha şık bir alternatif var mı?Hızlı iş parçacığı iletişim mekanizması
cevap
İş parçacıkları aynı bellek alanını paylaştığından, standart belleği mutex kilitleriyle kullanabilmeniz gerekir. Pipe() + libevent çözümü, her işlemin farklı bir bellek alanına sahip olduğu süreçler arası iletişim için daha uygun görünmektedir.
Cevabınız için teşekkür ederiz. Bunun için concurrent_bounded_queue kullanacağım sanırım :) – Stan
Implementing a Thread-Safe Queue using Condition Variables. Birimler arası iletişimi kolaylaştırmak için bir STL sırası, bir muteks ve bir koşul değişkenini kullanır. (Bunun Intel Threading Building Blocks'a uygulanıp uygulanmadığını bilmiyorum, fakat TBB soru/başlıkta belirtilmediğinden, sanki diğerleri benim yaptığım gibi burada olacak gibi düşünürüm. IPC değil. Ve bu makale bana yardım ettiği gibi yardımcı olabilir.)
Boost kilidine ve iş parçacığı güvenli kuyruğuna bir göz atın. Kullanımı çok kolay ve gerçekten iyi çalışıyor. İş için kuyruğu yoklamada ayrı çekirdekler üzerinde çalışan iplerle kullandım.
Genel değişkenler? – kennytm