È interessante notare che alcuni processori non forniscono un confronto-scambio, ma forniscono invece altre istruzioni ("Load Linked" e "Conditional Store") che possono essere utilizzati per sintetizzare il nome sfortunatamente confrontato e -swap (il nome suona come dovrebbe essere simile a "compare-exchange", ma dovrebbe essere chiamato "compare-and-store" poiché fa il confronto, memorizza se il valore corrisponde e indica se il valore corrisponde e lo store è stata eseguita). Le istruzioni non possono sintetizzare la semantica di confronto-scambio (che fornisce il valore letto nel caso in cui il confronto non sia riuscito), ma in alcuni casi può evitare il problema ABA che è presente con Compare-Exchange. Molti algoritmi sono descritti in termini di operazioni "CAS" perché possono essere utilizzati su entrambi gli stili di CPU.
Un'istruzione "Load Linked" indica al processore di leggere una posizione di memoria e guardare in qualche modo per vedere se potrebbe essere scritta. Un'istruzione "Conditional Store" indica al processore di scrivere una posizione di memoria solo se nulla può averlo scritto dall'ultima operazione "Load Linked". Si noti che la determinazione può essere pessimista; l'elaborazione di un interrupt, ad esempio, può invalidare una sequenza "Load-Linked"/"Conditional Store". Allo stesso modo in un sistema multiprocessore, una sequenza LL/CS può essere invalidata da un'altra CPU che accede a una posizione sulla stessa linea della cache della posizione che si sta guardando, anche se la posizione effettiva che si sta guardando non è stata toccata. Nell'uso tipico, LL/CS vengono utilizzati molto vicini tra loro, con un ciclo di tentativi, in modo che invalidi errati possano rallentare un po 'le cose, ma non causano molti problemi.
In genere si confronta e si scambia un valore con una posizione di memoria, sembra che si parli di due luoghi di memoria più complessi. E 'sicuramente quello di cui hai bisogno? –
Scusa, ho inteso una singola posizione di memoria, chiarirò. – axel22