Can Test and Set può essere implementato nel software senza supporto hardware?

Ecco il test e il set scritto nel software:

boolean TestAndSet(boolean *target) { boolean rv = *target; *target = TRUE; return rv; } 

e

 do { while(TestAndSetLock(&lock)) ; // do nothing // critical section lock = FALSE; // remainder section } while(TRUE); 

Possiamo usare il meccanismo in CPU che non supportano test-and-set a livello hardware? In tal caso, come viene assicurata l’atomicità?

È ansible utilizzare l’algoritmo di esclusione reciproca “panetteria” di Lamport sulle macchine senza TAS / CAS per accedere all’accesso al valore “atomico” (protetto).

http://www.disi.unige.it/person/DelzannoG/SO1/AA0607/bakery.htm

Diventa complicato solo se non si dispone di processi “N” ragionevolmente limitati.

Test e Set non possono essere implementati nel software senza supporto hardware nel modo in cui hai proposto.

È perché TestAndSet sopra dovrebbe essere un meccanismo da utilizzare per garantire l’esclusione reciproca, ma non è atomico. L’atomicità, tuttavia, è solo un altro nome per l’esclusione reciproca: le variabili interne di TestAndSet devono essere protette garantendo che due processi non possano eseguire il codice contemporaneamente.

In questo modo hai definito un metodo per garantire l’esclusione reciproca, che a sua volta richiede un meccanismo per garantire l’esclusione reciproca. Questo trucco può essere giocato un numero di volte, ma non ci saranno progressi reali senza un qualche tipo di supporto hardware.