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
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.
Bellek kullanımını azaltmak ve bellek ...
Aynı anda birden çok veri birleştirme....
Aynı bilgisayarda çalışan birden çok P...
Android aynı yoğunluğu ile birden fazl...
Eclipse, görünümleri aynı anda birden ...