SORU
22 Mayıs 2012, Salı


İşlevi modern platformlar için etkili bir bellek engeli diyorsun?

Bir kod temeli inceledim, aşağıdaki deyim buldum.

void notify(struct actor_t act) {
    write(act.pipe, "M", 1);
}
// thread A sending data to thread B
void send(byte *data) {
    global.data = data;
    notify(threadB);
}
// in thread B event loop
read(this.sock, &cmd, 1);
switch (cmd) {
    case 'M': use_data(global.data);break;
    ...
}

"Durun" yazar dedim, benim ekibinin kıdemli bir üyesi, burada bellek engel yok"! global.data ana bellek için önbellekten temizlendi garanti yok. Eğer iş parçacığı Bir iş parçacığı ve B iki farklı işlemciler - bu plan başarısız olabilir içinde çalışır".

Üst düzey programcı sırıttı ve yavaş yavaş açıklandığı gibi anlatılması, onun beş yaşında çocuk nasıl kravat bağcıklarını: "dinle genç adam, gördük burada çok iş parçacığı ile ilgili hatalar, yüksek yük testi, gerçek müşteri", durakladı sıfırdan onun uzunca sakallı, "ama biz hiç hata ile bu deyim".

< . p ^"ama bu kitapta öyle yazıyor..."

< . p ^"oldukça!", bana derhal o dingin,

"belki teorik olarak değil garantili, pratik, aslında kullanılan bir işlev çağrısı etkili bir hafıza bariyer, derleyici olmaz yeniden talimat global.data = data, beri olamaz biliyorum kimseye kullanarak bu fonksiyonu çağırın ve x 86 mimarisine sağlamak diğer CPU göreceksiniz bu parçanın küresel veri ile zaman parçacığı, B okuma komutu boru. Dinlenme temin ederim, gerçek dünyanın sorunlarından en endişe yeterli var, sahte teorik sorunlara ekstra çaba yatırım yapmaya ihtiyacımız yok.

Dinlenme oğlum temin ederim ki, zamanında ben-----PhD olmayan sorunları gerçek sorun, ayrı anlayacaksın."

Doğru mu? gerçekten uygulamada sorun çıkarmayacak bir (x 86, x 64 ve ARM söylüyorlar)?

Öğrendiğim her şeye karşı, ama uzun bir sakal ve bir çok akıllı görünüyor var!

Eğer bana bir kod parçası onu yanlış kanıtlamak göster eğer ekstra puan!

CEVAP
22 Mayıs 2012, Salı


Pratikte, bir işlev çağrısıderleyicibariyer, derleyici çağrı son genel bellek erişir hareket etmeyecektir yani. Bu bir uyarı derleyici bir şey bildiği fonksiyonları, örneğin yerleşiklere, inlined fonksiyonları (akılda halka ARZ edin!) vb.

İşlemci hafıza engeli (derleyici bir bariyer olarak; teoride bu işi yapmak için gereklidir. Genel durumunu değiştirme sistem çağrıları olan okuma yazma diyorsun ancak, çekirdek bir yerlerde uygulanmasında bellek engelleri sorunları olduğundan da eminim. Ama böyle bir garanti yok, teoride engeller.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bmarian22

    bmarian22

    22 Aralık 2007
  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • Truc Minh

    Truc Minh

    23 Ocak 2011