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

  • Jucyber Tutoriais

    Jucyber Tuto

    8 EYLÜL 2009
  • Phlearn Photoshop and Photography Tutorials

    Phlearn Phot

    11 EKİM 2011
  • whatever

    whatever

    30 EYLÜL 2005