2014-11-19 25 views
5

4 adet iplikten oluşan bir iş parçacığı havuzum var: t1, t2, t3 ve t4. Eşzamanlı olarak çalışıyorlar, fakat t3 ve t4'ten gelen girişler t2 çıkışına bağlı. İleti kuyruğunu nasıl uygulamalıyım? T2 tamamlandıktan sonra çıktı verilerini işlem için t3 ve t4'e gönderecek? Kilitleme mekanizmasını kullanarak ileti sırasını uygulamaya çalıştım, ancak kilitleme oldukça pahalı görünüyor. Dişler arasında veri ileten kilitsiz mekanizma var mı? Görsel stüdyo 2010'da boost :: thread kullanıyorum.C++ - Parçanayla ilgili veri iletimi

+1

aşağıdaki bağlantıdan bilgi: http://stackoverflow.com/questions/20595760/c-communication-between-threads –

cevap

3

Boost'un kilitsiz bir kuyruğu vardır: http://www.boost.org/doc/libs/1_56_0/doc/html/lockfree.html.

+0

Merhaba Tomo için benim t3 ve t4'ün her ikisi de çıktı verilerini t2'den almalıdır. Bu yüzden, kimin mesaj kuyruğundan veriyi kestireceğini merak ediyorum? T2 olması gerektiğinde, t3 veya t4'ün ilk önce mi tamamlanacağından emin değiliz? Yani t2 yeni veriyi ne zaman atarsa, dequeue de gerçekleştirecektir. – Bent

+0

Evet, t2 çıktısını kuyruğa koymalıdır. T3 ve t4, sırada sırada bir şey olup olmadığını periyodik olarak kontrol etmelidir. T3 ve t4'ün yapacak başka şeyleri varsayarsak. Değilse (yani, tek işi t2'nin çıktısını beklemek ve işlemek için), kilitsiz kuyrukları unutun ve sadece bir kilitleme çözümüyle geçin. Eğer iplikler zaten beklemek gerekiyorsa, kilitleme maliyeti endişeniz olmamalıdır. – Tomo

1

. concurrent_queue, concurrent_bounded_queue (bekleme için), pipeline, flow::graph dahil olmak üzere çok çeşitli paralel kavramları sağlar. İlk iki MS VS içinde de mevcuttur 2010.

+0

Merhaba Anton, cevap verdiğiniz için teşekkürler! Çünkü benim projem şu anda destek lib kullanıyor, bu yüzden daha fazla destek olacağım. Ama çözüm bulamamış olsam da TBB'ye bir göz atacağım. :)) – Bent

İlgili konular