İş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
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.
Tamsayı tabanlı bir güç işlevi uygulam...
Bir nesneyi klonlamak için en etkili y...
(Ya da ihmal) kullanmak için zaman var...
Modern Python özel istisnalar bildirme...
Java singleton deseni uygulamak için e...