2010-11-21 11 views
5

Küresel bir paylaşılan değişkenim var ve bu, 5 iş parçacığının her biri tarafından 5 kez güncelleniyor. Benim anlayış gereğince artım operasyonu Yani maksimum ve 5 konuda keyfi binişimi verilen minimum değer ne olacağını bu senaryoda o sormak istiyorum 3 talimatlar Birden çok iş parçacığı tarafından artırıldığında paylaşılan değişkenin minimum ve maksimum olası değeri

load reg, M 
inc reg 
store reg, M 

oluşmaktadır.

Bana göre, maksimum değer 25 (25'ten fazla olabileceğinden% 100 eminim) ve minimum değer 5'tür. Ancak minimum değerden emin değilim. Bazı keyfi serpiştirmede 5 daha az olabilir mi? Herhangi bir girdi büyük ölçüde takdir edilecektir. artım tanımın önüne alındığında

/* Global Variable */ 
int var = 0; 

/* Thread function */ 
void thread_func() 
{ 
    for(int c = 0; c < 5; c++) 
      var++; 
} 
+1

Neden bir 'global' değişkeni kilit olmadan güncellemeye çalışıyorsunuz? –

+0

@Mitch Wheat, daha "ilginç" bir teorik soruya neden oluyor? –

cevap

13

, ben Ancak 25.

sizin max katılıyorum, ben dk aşağıdaki senaryosunda 2 olabileceğine inanıyoruz. I 5 dişlilerini, A, B, C, D ve E

  1. bir yükleri
  2. 0 adlı ettik C, D
  3. B, 5 iterasyon 4'e kadar çalışır tamamlanma e çalıştırın.
  4. A 0 ila 1'lik bir artışlar ve sonucu kaydeder (1). I jtdubs tarafından verilen aynı mantığı kullanın
  5. B
  6. bir
  7. B artışlarla tamamlanıncaya kadar devam eder 2'ye 1 yükleri 1 ve depolar 2.
0

, minimum değer aşağıdaki 1 olmalıdır vaka.

A, B, C, D ve E olarak 5 konuda

  1. bir yükleri 0 aynı adlandırma kullanmasını sağlar
  2. B, C, D, E tamamlanması öncesinde ve en fazla artırılır değer 20 (4 iş parçacığının her biriyle 5 artış).
  3. bir artışlarla 1 0 ve 1.
+0

Hala A'yı tamamlamak için çalıştırmanız gerekiyor ... – krismath

0

I2 (değil 1) en az kabul sonucu depolamak.

Minimum eşittir 1 çözüm, A'nın paylaşılan belleğe 1 depolandıktan sonra tamamlanmadığı gerçeğini göz ardı eder. "Interfere" için başka bir iş parçacığı kalmadıysa, A iş parçacığı, sonuç 5 ile biten kalan 4 yineleme boyunca devam etmelidir.

En az 2 çözümün etkinleştirilmesi, kalan iki iş parçacığı A arasındaki bir son oyundur. B, diğer tüm dişler çalışmayı bitirdikten sonra, mümkün olan en düşük sonuca yol açar. B "atıklar" 4 tekrarı sadece 1'i tekrar yüklemek, A'yı arttırmak ve A'yı tamamladıktan sonra 2'yi depolamak.

İlgili konular