2011-11-14 31 views
7

İşte benim sorunumun basitleştirilmiş bir sürümüdür.C++ Çoklu iş parçacığı eşitlemesi

A -> B -> C -> A -> B -> C -> A -> B -> ....... 

Bütün Konuları Bütün Konuları B. ulaştıysa da ipliğine B'nin yürütme sadece başlamalıdır yani eşzamanlı talimat B çalıştırması istiyorum:

sonsuz döngüye 3 talimatları uygulayarak yürütülmesi N ipler vardır Yani, B -> C -> A uygulanmış bir iş parçacığı varsa, diğer iş parçacıkları da yürütmeye hazır oluncaya kadar beklemelidir.

Mümkünse, lütfen işe yarayacak taşınabilir bir çözümü bana bildirin. her iki pencerede de & MAC.

+0

Sadece dün ** [Bartosz Milewski, C++ 11 Concurrency Dizisi: 9. Koşul Değişkenleri üzerine bir yayınladı.] (Http://bartoszmilewski.wordpress.com/2011/11/13/c11-concurrency-series-9 Şarta-değişkenler /) **. Dizide en eğlenceli olanı buldum (ilk önce başkalarını görmeye gerek yok, bence) – sehe

cevap

4

Özellikle condition variables bölümündeki Boost thread library ürününü incelemelisiniz.

+7

Her ne kadar [bariyer] istediğinize benziyorsa da (http://www.boost.org/doc/libs/1_47_0/ doc/html/thread/synchronization.html # thread.synchronization.barriers) –

+0

@MikeSeymour: Neden bir cevap olarak eklemiyorsunuz? – jgauffin

+0

Teşekkürler Mike, evet, ihtiyacım olan şey bariyer. Ayrıntılara girmeme izin verin ve ayrıntılara girmeme izin verin. Tekrar teşekkürler! – arvin

0

N-1 semaforları ve bir muteks dizisi? Tüm iş parçacıkları mutex'i, bir sayıcıyı ve N'den küçükse, muteks'i serbest bırakır ve [counter] 'da semafor dizisi üzerinde bekler. Nth iş parçacığı sayacı N olarak bulur, tüm semaforları işaretler, sayacı 0'a getirir, 'B' çalıştırırsa muteks çıkar ve çıkar. Diğer parçacıklar, serbest bırakıldığında, B'yi de yürütürler ancak Nth iş parçacığı 'B' yürütüldükten ve mutex'i serbest bırakana kadar tekrar dönüp tekrar giremezler.

Tüm çoklu görev OS'de semaphores/mutex var. Varsa, semafor yerine bir olayı kullanabilirsin.

+1

Aslında, [n-1] işaretli bir semafor iyi olurdu - olaylardan farklı olarak bir semafor ile herhangi bir dizi gerekli değil. –

İlgili konular