Soru: Kod yürütmenin yalnızca çok iş parçacıklı bir programda bir kerede bir iş parçacığında gerçekleşmesini garanti etmek mümkün mü? (Bu yaklaşır Ya da bir şey)C++ çoklu iş parçacıklı programında seri kod yürütme
Özellikle: Ben A, B, C ı M çalışmasına izin verilmelidir kim karar edebilmek istiyorum bir kontrolör (bir iplik) M ve konuları vardır. Başkaları yayınlanmıyor ise İdeal A, B ve C kendi iplik kendi kodu çalıştırmak istiyorum: iplik kontrol transferleri geri Neden M.
için (ya nihayet veya geçici olarak) tamamlandığında. Bu, her bir iş parçacığının, denetim denetleyicisini denetleyiciye geri verdiğinde bıraktıkları yerden başlayıp, durduklarında yönergelerini ve yığınlarını tutmasını sağlar.
Şu an yapıyorum: Bunu gerçekten yapabileceğim bir kod yazdım - ama beğenmedim. Sözde C'de
:
//Controller M
//do some stuff
UnlockMutex(mutex);
do{}while(lockval==0);
LockMutex(mutex);
//continue with other stuff
//Thread A
//The controller currently has the mutex - will release it at UnlockMutex
LockMutex(mutex);
lockval=1;
//do stuff
UnlockMutex(mutex);
nedeni
do{}while(lockval==0);
gereklidir neden muteks kilitli değilken, A ve M hem devam edecektir. Bu kesmek, A'nın M kilitlemeden önce A'nın kilitlemeyeceğini ve A'nın kilidi tekrar ikinci kez tekrar alıp tekrar çalışacağını (sadece bir kez çalıştırılması) sağlar.
do-while
overkill gibi görünüyor, ama iş yok. Yani benim sorum, daha iyi bir yolu var mı? Win32 "CriticalSection" için
Niçin A, B ve C iş parçacıklarının aynı anda çalışmasını istemiyorsunuz? Çözmeye çalıştığın problem nedir? Sorunu çözmek için neredeyse kesinlikle daha iyi bir yol var, ama bize sorunun ne olduğunu * söylemelisiniz *. –
Bu bölüm beni şaşırtıyor: "Bu, her bir iş parçacığının, komut satırlarını ve bekletme sırasında yığınlarını tutmalarını sağlar". Bu mutekslerin amacı değil.İşletim sistemi (önleyici iplik modeli varsayılarak), her bir iş parçacığının yığınını korur ve CPU zamanını verdiği için kaydeder. – veefu
@veefu - OP 'yeşil dişler' istiyor, AKA lifleri (sanırım). A, B ve C'nin hepsi kendi yığınlarını alırlar, ancak yalnızca bir tanesi bir seferde çalışabilir, çünkü yalnızca bir tane çekirdek iş parçacığı vardır. –