Senkronizasyon engeli

Gelen eşzamanlı programlama , bir senkronizasyon bariyer belirli sayıda olmasını sağlar görevleri belirli bir noktayı geçti. Bu nedenle, bu engele ulaşan her görev, belirtilen görev sayısı bu engele ulaşana kadar beklemek zorunda kalacaktır.

Tek bariyer algoritması

Bu ilk senkronizasyon engeli algoritmasını elde etmek için iki semafora ve bir değişkene ihtiyacınız vardır :

NBariyeri açmadan önce ulaşması gereken görevlerin sayısını gösteren sabiti tanımlamak da gereklidir .

Barriere : P(MUTEX) Nb_Att++ SI Nb_Att==N ALORS POUR I DE 1 à N-1 FAIRE V(ATTENTE) FIN POUR Nb_Att=0 V(MUTEX) SINON V(MUTEX) P(ATTENTE) FIN SI

Algoritmanın sınırlamaları

Bu ilk algoritma doğrudur ancak döngüsel bir engel uygulamamaktadır. Görevlerin bir bariyerle birkaç kez senkronize edilmesi gerekiyorsa, alternatif bir şekilde 2 farklı bariyer kullanmak gerekir. Aşağıdaki senaryo, bir karşı örnek kullanarak, aynı bariyerin hemen tekrar kullanılamayacağını göstermektedir:

  1. Bir işlem bir ilk arasında , N-1 (a ile durdurulmuş olduğu önleyici mekanizma arasında) V (karşılıklı dışlama) ve P (bekle) ve belirli bir süre için kumanda devam etmez.
  2. Tüm süreçler engele ulaşır. Son işlem geldiğinde, WAIT semaforu olan eşit için - (N-2), (nedeniyle bir onun yapmamış , P (BEKLE) işlemi ).
  3. Son ulaşma işlemi N-1 kez V (HOLD) gerçekleştirir ve muteksi serbest bırakır. WAIT semaforu 1'e eşittir .
  4. Bir B süreci hızlı bir şekilde çalışır ve ikinci senkronizasyon engeline ulaşır.
  5. B , bariyer kodunu yürütür ve bir P (HOLD) gerçekleştirir . Bu işlem engellemez çünkü ATTENTE semaforu 1'e eşittir (süreç A hala ilk engelin P (BEKLEME) işlemini gerçekleştirmemiştir ).

Dolayısıyla Süreç B , diğer tüm süreçler ona ulaşmadan önce ikinci senkronizasyon engelini aşmış olacaktır.

Çoklu bariyer algoritması

Yukarıda bahsedilen sorunu çözmek ve döngüsel bir engel uygulamak için, son işlemin muteksi serbest bırakmadan önce diğer tüm işlemlerin P'lerini (BEKLEME) gerçekleştirmesini beklemesine izin verecek ikinci bir semafor eklemek gerekir . Bu nedenle:

Barriere : P(MUTEX) Nb_Att++ SI Nb_Att==N ALORS POUR I DE 1 à N-1 FAIRE V(ATTENTE) FIN POUR POUR I DE 1 à N-1 FAIRE P(PARTI) FIN POUR Nb_Att=0 V(MUTEX) SINON V(MUTEX) P(ATTENTE) V(PARTI) FIN SI

Bu nedenle, bir süreç diğerlerinden daha hızlı çalışıyorsa, tüm işlemler bitene kadar muteksi kilitleyemeyecektir.

Kullanım örnekleri

Senkronizasyon engelleri aşağıdakiler için kullanılabilir:

Ayrıca görün