Sto cercando di imparare e comprendere meglio il multithreading, ma sono rimasto bloccato dal comportamento delle funzioni atomiche come fetch-and-add. Nel caso specifico di fetch-and-add, è a mia conoscenza che un valore (diciamo x che attualmente è uguale a 5) è aggiunto a un valore di incremento (diciamo 3), la somma risultante (8) viene scritta in x posto in memoria, tuttavia viene restituito il vecchio valore (5).Perché le operazioni atomiche come fetch-and-add restituiscono il vecchio valore della variabile che viene modificata?
Esistono molte altre funzioni simili in luoghi diversi (come le funzioni atomiche di OpenGL, gli oggetti Atomic di Java e molte altre aree) che si comportano in questo modo. Ma quello che non capisco è perché un posto nel codice vorrebbe scrivere in memoria e tuttavia restituire il valore che voleva modificare in primo luogo. Qualcuno può aiutare a far luce su questo?
Questo è stato un articolo incredibilmente utile da leggere. Grazie, Sergey e Dimitar così tanto per l'aiuto e gli esempi! – hashahid