Sono un programmatore Java di lunga data esperto del modello di memoria Java. Sto iniziando a imparare C # e, sulla base di ciò che ho imparato finora, il modello di memoria C # sembra essere molto simile al JMM. Ciò conferma la mia precedente comprensione del fatto che il JMM riflette le caratteristiche delle architetture supportate dalla JVM. I requisiti linguistici riflettono le garanzie più deboli di tutte le architetture supportate.
Ma una differenza che ho notato è nel modo in cui gli sviluppatori di Java e C # parlano di architetture. Laddove i programmatori Java parlano di errori di codice manifestati in modo improprio e sincronizzato su "alcune architetture", i programmatori C # tendono ad essere più specifici. Ad esempio, questo articolo indica che Itanium ha un modello di memoria "debole" :
The mainstream x86 and x64 processors implement a strong memory model where memory access is effectively volatile. ... The Itanium processor implements a weaker memory model.
Ho lavorato solo su x86 e x64, e non ho mai saputo quali architetture imponessero i misteriosi requisiti del JMM che non sembravano mai avere importanza quando cercavo di dimostrare gli effetti della loro violazione. Ora ne conosco uno.
Quali altre architetture hanno modelli di memoria "deboli"?