2016-05-30 15 views
1

2 Threads A und B teilen sich volatile int i.gcc: __sync_lock_test_and_set VS. = Operator mit flüchtigen Variablen

Thread A Inkrementen i wie folgt aus: __sync_fetch_and_add(&i, 1);

Thread B setzt i auf einen beliebigen Wert V wie folgt aus: i = 15;.

Meine Frage: für diese Art der Nutzung, B __sync_lock_test_and_set(&i, 15); anstelle direkter Affektiertheit mit = Operator verwenden sollte?

Wenn ja, ist __sync_lock_release zwingend nach dem test_and_set erforderlich?

Env: gcc 4.1.2, CentOS 5.11 32 Bit, kein C++ 11

Antwort

0

Wenn Sie die Synchronisierungsfunktionen nicht verwenden Sie dann gibt es Daten Rennen für i zwischen Faden A und B. Und je die Definition von __sync_lock_test_and_set und __sync_lock_release, sollten Sie Release nach der Verwendung von sync_lock verwenden.

for ref

Verwandte Themen