Differenza tra mutex in windows e linux

3

È corretto che un oggetto mutex in Linux non possa essere usato per la sincronizzazione tra processi diversi rispetto alla sua controparte Windows?

Se ciò è vero - quale era l'idea di limitare la funzionalità di sincronizzazione mutex su Linux?

    
posta Mitten 08.06.2013 - 08:26
fonte

2 risposte

3

La differenza è una specie di "truccato", su Windows MUTEX è usato molto raramente, e anche in questo caso non c'è davvero da sincronizzare ma per scoprire già l'istanza runnin del programma. Ciò che ha largo uso è CRITICAL_SECTION, ed è un equivalente vicino di mutex ricorsivo su linux, solaris e altri.

    
risposta data 08.06.2013 - 23:04
fonte
2

Linux Mutex può essere utilizzato per la sincronizzazione tra processi. Ci sono stato, fatto questo, molto utile. Il Mutex deve essere accessibile ai processi in questione, come essere in un blocco di memoria condivisa. Il Mutex potrebbe anche non essere condiviso, e quindi privato del processo che lo ha creato. La funzionalità di Mutex in Linux non è limitata.

I Windows Mutex sono oggetti di sistema. Qualsiasi processo può utilizzare il Mutex se conosce il nome del Mutex (nel caso di un Mutex denominato) o se ha un handle per esso.

La sezione critica è funzionalmente equivalente a un mutex non condiviso in Linux, ma non è un mutex. Puoi usare un mutex per eseguire il lavoro di Sezione critica, anche se un po 'eccessivo, ma non puoi ottenere le capacità di interprocesso di un Mutex dalla Sezione Critica (o puoi?).

Mutex non è raramente usato; un'istantanea del mio sistema (usando WinObj di Sysinternal) mostra 100 mutex, 173 sezioni critiche e solo 8 semafori. E mentre si utilizza un Mutex per indicare che un processo è in esecuzione (e quindi impedisce l'istanziazione di un'altra copia di quel processo) è probabilmente l'uso più noto di un Mutex di Windows e una tecnica di sincronizzazione valida, se complessa, una rapida occhiata nella lista dei mutex sulla mia macchina rivela altri usi, uno dei più comuni è controllare l'accesso alla cache di qualche tipo (browser, SVN, ecc.)

Personalmente non sono d'accordo con l'uso di una porta per scoprire i processi. Solo perché la porta 61348 è in uso non significa che il processo che presumo di essere presente sia quello in cui è presente la porta. A meno che il processo richieda tale porta, come ad esempio il server che ascolta su una porta ben conosciuta, non ci sono abbastanza informazioni per decidere se istanziare o meno.

    
risposta data 07.11.2015 - 09:31
fonte

Leggi altre domande sui tag