SORU
12 Aralık 2013, PERŞEMBE


Kilitleme birden çok iş parçacığı't erişim kazandı garanti ederek önlemek aynı bellek misin?

Büyük bir dizi var ve birden çok iş parçacığı ile içeriğini işlemek istiyorum diyelim. Eğer belirli bir bölüm için her iş parçacığı temsilci, garanti yok üst üste gelirse, o kilitleme gerek, konuları dizi dışında başka bir bellek erişimi yok varsayarak ortadan kaldırıyor mu?

Böyle bir şey (pseudo-code):

global array[9000000];

do_something(chunk) {
    for (i = chunk.start; i < chunk.end; i  )
        //do something with array
}

main() {
    chunk1 = {start: 0, end: 5000000};
    chunk2 = {start: 5000000, end: 9000000};

    start_thread(thread1, do_something(chunk1));
    start_thread(thread2, do_something(chunk2));

    wait_for_join(thread1);
    wait_for_join(thread2);
    //do something else with the altered array
}

CEVAP
12 Aralık 2013, PERŞEMBE


Bu güvenli C 11 uyumlu bir derleyici [intro.bellek] (§1.7):

Bir bellek konumu ya da skaler türde bir nesne ya da bir maksimal. bit alanlarının tümüne sahip bitişik sıra sıfır genişlik. [...] İki yürütme iş parçacığı (1.10) güncelleme ve ayrı hafıza erişebilirsiniz birbirimize engel olmadan yerler.

C11 aynı garanti (hatta aynı ifadeler kullanın) §3.14 verir.

C 03 derleyici bu standart ile çalışmak için garanti değil, ama yine de eğer derleyici bir uzantısı olarak benzer garantiler sağlıyorsa işe yarayabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jpmkm1

    jpmkm1

    4 NİSAN 2008
  • KarnasCamillo

    KarnasCamill

    24 EKİM 2007
  • Vsauce

    Vsauce

    30 Temmuz 2007