È possibile eseguire l'esclusione reciproca dei thread senza il supporto del sistema operativo?

1

Suppongo che potresti adattare algoritmi di mutua esclusione distribuiti (Ricart / Agrawala, ecc.), ma a parte questi approcci più esotici, ti viene richiesto di utilizzare le primitive fornite dal sistema operativo per ottenere l'esclusione reciproca?

Ad esempio, in C # si usa qualcosa come lock:

lock (myobject)
{
    // Do something
}

Lock quindi usa una variabile di condizione fornita dal sistema operativo (credo?). Da tutto ciò che ho letto sui monitor, tutti si basano su alcune sezioni dell'implementazione del monitor eseguite a livello atomico. E l'unico modo (che io possa pensare) per garantire che è se il kernel lo ha reso esplicitamente così. È giusto?

    
posta ConditionRacer 13.02.2014 - 06:12
fonte

3 risposte

3

ci sono soluzioni software per l'esclusione reciproca utilizzando solo la memoria condivisa.

Il principale trambusto nell'implementazione di questi è che l'ordine dei carichi e dei depositi delle variabili condivise è molto importante e il compilatore / ottimizzatore non può armeggiare con loro affatto , la maggior parte delle lingue ha una parola chiave volatile per i campi che assicureranno che ciò sia vero. Anche i carichi e i negozi sopra menzionati devono essere atomici (non è possibile che si verifichino valori di garbage quando più thread accedono alle variabili).

    
risposta data 13.02.2014 - 09:57
fonte
5

Hai bisogno di una sola confronta e scambia tipo di istruzione o load link / store condizionale coppia di istruzioni che può modificare il contenuto di un elemento di memoria a seconda del contenuto di tale archivio . In generale, i linguaggi di alto livello non supportano questo costrutto, principalmente perché varia in modo selvaggio a seconda del set di istruzioni dell'hardware.

Se si esegue il codice in C e si conosce la propria architettura hardware, è possibile eseguire il rollover della propria libreria mutex, ma sarebbe impossibile in un linguaggio di livello superiore.

    
risposta data 13.02.2014 - 07:37
fonte
3

I blocchi di spin implementati con l'atomica possono essere utilizzati per l'esclusione reciproca, ma vengono utilizzati di solito a livelli inferiori. Il problema è che il thread è un'astrazione fornita dal sistema operativo. Quindi OS è il posto migliore per controllare l'esecuzione del thread (creare, avviare, interrompere, sospendere).

    
risposta data 13.02.2014 - 07:32
fonte

Leggi altre domande sui tag