2010-04-27 5 views
11

Ho sentito che scegliere di usare la parola "sincronizzato" per descrivere le dichiarazioni mutexed è semplicemente un errore (Modifica: "errore" era una scelta sbagliata di parole qui.Vedi modifica) in Java, ma mi chiedo se c'è in realtà una ragione dietro la scelta.Perché la parola chiave sincronizzata in Java viene chiamata "sincronizzata" anziché quella più precisa "mutexata"?

[Edit]

Spinto dai commenti di Safyan, vorrei aggiungere che la sincronizzazione è un termine generale per stabilire relazioni di sincronizzazione tra i thread. Può includere l'esclusione reciproca e cose come il controllo del tasso (ad esempio due thread che fanno qualcosa alla stessa velocità). Sembra inutilmente ambiguo usare "sincronizzati" per indicare l'esclusione reciproca anziché una parola chiave più specifica come "mutexed".

+0

forse un riferimento utile: http://stackoverflow.com/questions/1085709/what-does-synchronized-mean –

risposta

7

Non è un errore. Vuol dire quello che dice; il codice deve essere sincronizzato con altri thread per fornire l'esclusione reciproca. E, in effetti, il termine sincronizzato può avere più senso di "mutex", poiché "mutex" implica un tipo molto particolare di primitiva di sincronizzazione e la parola chiave sincronizzata potrebbe essere implementata usando un numero qualsiasi di primitive di sincronizzazione syncrhonization (test & impostato con active sondaggi, semafori, ecc.).

+0

Per me, 'mutex' è l'abbreviazione comune per 'mutua esclusione' non è una primitiva particolare, anche se potrebbe sii il nome di un primitivo in una lingua particolare. –

+1

@Edward, sia in UNIX che in Windows, il mutex è una primitiva particolare che supporta lock, unlock e trylock. Mentre il monitor Java supporta anche l'attesa e la notifica che sono aspetti delle variabili di condizione. –

+0

@Safyan, abbastanza equo, ma la "sincronizzazione" non si riferisce generalmente a stabilire relazioni temporali tra le attività? Mutex può essere un termine sovraccarico ma sembra più chiaro di "sincronizzato". –

0

La parola chiave sincronizzata viene utilizzata per acquisire e rilasciare il blocco su un monitor. Come i Mutex, i monitor sono usati per il controllo della concorrenza, ma non sono gli stessi.

L'utilizzo della sincronizzazione in sé non è un errore, ma può essere un costrutto di basso livello per l'utilizzo con multi-threading e l'uso inappropriato può portare rapidamente a errori di multi-threading.

+0

Penso che volevi dire "Usare sincronizzato in sé stesso". –

+0

Grazie, l'ho risolto. – mdma

0

L'utilizzo di parole chiave sincronizzate anziché mutex è in realtà un buon modo di esprimere il termine. Con mutex non siamo abbastanza chiari, ma la stessa parola chiave sincronizzata racconta se stessa. Sincronizzato è posto al codice che in realtà ha bisogno di essere sincronizzato tra nessuno dei thread che tutti vogliono accedere a quel codice. Ecco perché è definito come sincronizzato.