La parola chiave Synchronized di java permette la mutua esclusione fra processi di una variabile. Come fà? Tramite una soluzione software (tipo l'algoritmo di Peterson) o tramite una soluzione hardware (tipo la primitiva TESTANDSET)?
La parola chiave Synchronized di java permette la mutua esclusione fra processi di una variabile. Come fà? Tramite una soluzione software (tipo l'algoritmo di Peterson) o tramite una soluzione hardware (tipo la primitiva TESTANDSET)?
Non sono sicuro di questo, ma credo che lo faccia tramite soluzione software. Ciò che mi spinge a dare questa risposta è il fatto che Java deve rimanere cross-platform anche in nel campo delle sincronizzazioni fra processi, quindi non può avere accesso diretto all'hardware. Il programma, infatti, gira sopra una macchina virtuale (la JVM), che fornisce questa feature ai programmi che girano su di essa.
In effetti non ho trovato molto a riguardo nel sito della Sun (molte delle risposte che cerchi sono, infatti, ad esclusiva consultazione da parte di chi è iscritto al Sun Developers Network e io non sono fra quelli).
Una cosa, però, posso consigliarti: dai un'occhiata al libro "The Java Language Specification" (http://java.sun.com/docs/books/jls/), forse lì trovi le tue risposte.
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
A questo fatto della "cross platform" non ci avevo mai pensato e, ora che me lo hai detto, sono quasi convinto che sia proprio come dici te. Aspettiamo un po... magari qualcuno che ha accesso a tale informazioni potrà confermare o smentire.
Però ora che ci penso, è vero che java è cross-platform, ma è pur vero che la JVM è differente per ogni architettura. Forse la chiave della questione è proprio li, nel senso che sulle architetture che hanno una primitiva hardware di TASTANDSET (o simile) la parola chiave syncronized è implementata in hardware, mentre nelle altre con soluzione software. Che ne pensi?
la risposta la si trova andando a vedere come lavora la VM.
Un punto di partenza potrebbe essere http://www.javaworld.com/javaworld/j...07-hood_p.html
Ho visto l'articolo postato da mcolombara, ma, come temevo, viene spiegato il funzionamento ad alto livello (ovvero come la JVM gestisce la cosa dal punto di vista del bytecode). Ho notato, però, che l'articolo fornisce un link che, sbadatamente, non ti ho fornito sopra. Infatti ti ho fornito il link al libro "The Java Language Specification", ma non quello al libro "The Java Virtual Machine Specification": http://java.sun.com/docs/books/vmspec/
Anch'io ho pensato al fatto che la VM viene distribuita in versioni differenti a seconda del S.O. e, come te, ho pensato che potesse comportarsi in modo diverso a seconda di ciò che ha a disposizione... il dibattito rimane aperto!
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza