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

  • Fuse

    Fuse

    21 Kasım 2005
  • merumputdotcom

    merumputdotc

    24 ŞUBAT 2012
  • picster

    picster

    20 NİSAN 2006