C değişkeni erişme# atomik işlem? | Netgez.com
SORU
13 AĞUSTOS 2008, ÇARŞAMBA


C deÄŸiÅŸkeni eriÅŸme# atomik iÅŸlem?

Ben büyüttüm inanıyorum ki eğer birden çok iş parçacığı erişim bir değişken, daha sonra tüm okur ve yazar için bu değişken korunmalıdır eşitleme kodu gibi bir "kilit" deyimi, çünkü işlemci olabilir geçiş yapmak için başka bir iş parçacığı yarısında yazın.

Ancak, Sistem bakıyordum.Web.Güvenlik.Üyelik Reflektör kullanarak ve bu gibi bir kod buldu

public static class Membership
{
    private static bool s_Initialized = false;
    private static object s_lock = new object();
    private static MembershipProvider s_Provider;

    public static MembershipProvider Provider
    {
        get
        {
            Initialize();
            return s_Provider;
        }
    }

    private static void Initialize()
    {
        if (s_Initialized)
            return;

        lock(s_lock)
        {
            if (s_Initialized)
                return;

            // Perform initialization...
            s_Initialized = true;
        }
    }
}

Neden s_İnitialized alan kilit dışında okumak mı? Başka bir iş parçacığı aynı anda yazmaya çalışıyor olamaz mı?Ve değişkenleri atom okur?

CEVAP
13 AĞUSTOS 2008, ÇARŞAMBA


Kesin cevap spec gitmek için. :)

Bölüm I, Bölüm 12.6.6 bu CLİ spec belirtir: "A uygun CLİ garanti eder, okuma ve yazma erişimi için düzgün hizalanmış bellek konumlarını hayır daha büyük yerli kelime boyutu atomik bütün yazma erişimleri için bir yer aynı boyutta."

Bu s_İnitialized asla kararsız geleceğini doğruladı, ve atomik primitve okuyup yazıyor.

Birbirine yeniden gelen işlemci önlemek için bellek okuma ve yazma bir bariyer oluşturur. Kilit bu örnekte sadece gerekli bariyer oluşturur.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • eHow

    eHow

    27 NÄ°SAN 2006
  • Rozetked | Обзоры

    Rozetked | Ð

    5 AÄžUSTOS 2011
  • TouchePro

    TouchePro

    27 EYLÃœL 2007