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

  • BuzzFeedVideo

    BuzzFeedVide

    10 AĞUSTOS 2011
  • eyes4beautee

    eyes4beautee

    17 HAZİRAN 2011
  • InsideBlackBerry

    InsideBlackB

    14 Aralık 2009