SORU
29 NİSAN 2009, ÇARŞAMBA


Zaman uyumu ve kritik bölüm arasındaki fark nedir?

Lütfen Linux açıklamak, Windows perspektifler?

C programlama I am bu iki anlamda da bir fark yaratmaz. Yazı kadar, örneklerle ve böyle lütfen....

Teşekkürler

CEVAP
29 NİSAN 2009, ÇARŞAMBA


Windows için önemli bölümleri uyumu daha kilo daha hafif.

Uyumu süreçler arasında paylaşılan olabilir, ama her zaman bir sistem bazı yükü olan çekirdek için arama sonucu.

Kritik bölümler sadece kullanılan içinde bir süreç, ama avantajı, onlar sadece geçiş yapmak için çekirdek modunda davanın çekişme - Uncontended kazanır, bir ortak durum, inanılmaz derecede hızlı. Çekişme durumunda, çekirdek bazı eşitleme ilkel (bir olay ya da semafor gibi) beklemek girin.

İkisi arasındaki zaman karşılaştırır hızlı örnek bir uygulama yazdım. 1,000,000 uncontended edinir ve bültenleri için bir sistem üzerinde, bir dışlama üzerinde bir saniye sürer. Önemli bir bölümü 1.000.000 ~50 ms satın alır.

Burada test kodu var, Eğer zaman uyumu ilk veya ikinci ise bu koştum ve benzer sonuçlar var, başka etkileri göremiyoruz.

HANDLE mutex = CreateMutex(NULL, FALSE, NULL);
CRITICAL_SECTION critSec;
InitializeCriticalSection(&critSec);

LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
LARGE_INTEGER start, end;

// Force code into memory, so we don't see any effects of paging.
EnterCriticalSection(&critSec);
LeaveCriticalSection(&critSec);
QueryPerformanceCounter(&start);
for (int i = 0; i < 1000000; i  )
{
    EnterCriticalSection(&critSec);
    LeaveCriticalSection(&critSec);
}

QueryPerformanceCounter(&end);

int totalTimeCS = (int)((end.QuadPart - start.QuadPart) * 1000 / freq.QuadPart);

// Force code into memory, so we don't see any effects of paging.
WaitForSingleObject(mutex, INFINITE);
ReleaseMutex(mutex);

QueryPerformanceCounter(&start);
for (int i = 0; i < 1000000; i  )
{
    WaitForSingleObject(mutex, INFINITE);
    ReleaseMutex(mutex);
}

QueryPerformanceCounter(&end);

int totalTime = (int)((end.QuadPart - start.QuadPart) * 1000 / freq.QuadPart);

printf("Mutex: %d CritSec: %d\n", totalTime, totalTimeCS);

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dan Gately

    Dan Gately

    13 AĞUSTOS 2006
  • tunez4you

    tunez4you

    20 EKİM 2008
  • YouplusmeVEVO

    YouplusmeVEV

    4 EYLÜL 2014