SORU
15 Kasım 2013, Cuma


Neden bir konu var.Uyku(1).NET iç karma tablo?

Son zamanlarda uygulanması okuyordum .NET 7* *ve bana göre anlaşılabilir kodu, parça karşılaştı. Kod parçası

int num3 = 0;
int num4;
do
{
   num4 = this.version;
   bucket = bucketArray[index];
   if (  num3 % 8 == 0)
     Thread.Sleep(1);
}
while (this.isWriterInProgress || num4 != this.version);

Bütün kod System.Collections.Hashtable public virtual object this[object key] (mscorlib, Version=4.0.0.0) içinde.

Ve asıl soru:

Thread.Sleep(1) orada olmasının sebebi nedir?

CEVAP
15 Kasım 2013, Cuma


Uyku(1) işlemci verimi ve diğer konuları çalışmasına izin vermek için Windows belgelenmiş bir yoldur. Yorumlarla Kaynak: Referans kodu bulabilirsiniz

   // Our memory model guarantee if we pick up the change in bucket from another processor,
   // we will see the 'isWriterProgress' flag to be true or 'version' is changed in the reader.
   //
   int spinCount = 0;
   do {
       // this is violate read, following memory accesses can not be moved ahead of it.
       currentversion = version;
       b = lbuckets[bucketNumber];

       // The contention between reader and writer shouldn't happen frequently.
       // But just in case this will burn CPU, yield the control of CPU if we spinned a few times.
       // 8 is just a random number I pick.
       if( (  spinCount) % 8 == 0 ) {
           Thread.Sleep(1);   // 1 means we are yeilding control to all threads, including low-priority ones.
       }
   } while ( isWriterInProgress || (currentversion != version) );

İsWriterİnProgress değişken istikrarsız bir bool. Yazarın İngilizce ile başı belaya girdi"""". uçucu okunur ihlal oku Temel fikir versin kaçınıyorum, iplik bağlama geçer çok pahalı, yazar, hızlı bir şekilde halletmek için bazı umut var. Eğer sonuç yok ise. o zaman açıkça yanan cpu önlemek için verim. Bu muhtemelen sayaç Kilidi bugün yazılmış olabilirdi. ama bu karma tablo çok eski. Bellek model ile ilgili varsayımlar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dive In

    Dive In

    17 Temmuz 2013
  • DrakeVEVO

    DrakeVEVO

    17 AĞUSTOS 2009
  • Hak5DarrensVlog

    Hak5DarrensV

    11 EYLÜL 2009