2016-03-29 12 views
2

Ich versuche mir klarzumachen, was "verzahnt" genau bedeutet. Ich habe Folgendes gelesen: "Die verzahnten Funktionen bieten einen einfachen Mechanismus zum Synchronisieren des Zugriffs auf eine Variable, die von mehreren Threads gemeinsam genutzt wird. Sie führen auch Operationen auf Variablen auf atomare Weise aus."Welche Operationen werden miteinander verknüpft?

Also könnten die folgenden Funktionen gesperrt genannt werden?

#include <QtCore> 
#include <QAtomicPointer> 

QAtomicInt i; 

void interlockedMultiply(int factor) 
{ 
    int oldValue; 
    do 
    { 
     oldValue = i; 
    } while (!i.testAndSetOrdered(oldValue, oldValue * factor)); 
} 


long long x; 
QReadWriteLock lock; 

void interlockedAdd(long long y) 
{ 
    lock.lockForWrite(); 
    x += y; 
    lock.unlock(); 
} 

Wenn nein, schlagen Sie bitte einen richtigen Namen vor.

+1

'Interlocked' bedeutet meiner Erfahrung nach nichts wirklich Spezifisches (ich kann mich jedoch irren). Es ist eher eine Bezeichnung für Utility-Funktionen, die atomare Primitive umhüllen. Also ja, ich würde sagen, es ist in Ordnung, diese Funktionen als "verriegelt" zu bezeichnen, obwohl es vielleicht überraschend ist, eine Sperre in einer solchen Funktion zu verwenden. – Cameron

Antwort

1

Interlocked bedeutet, dass gleichzeitige Operationen das erwartete Ergebnis liefern. I.e. Wenn Sie fünf Mal eine Interlock-Addition durchführen, wird die Variable fünf Mal erhöht. Nicht mehr und nicht weniger.

+0

Beide oben genannten Funktionen folgen dieser Regel. Können wir sie also verzahnt nennen? Ich bin besonders neugierig auf die mit einem kritischen Abschnitt, da verriegelte Operationen oft als Alternative zu blockierenden Operationen, d. H. Sperren, verwendet werden. – mentalmushroom

+0

Auch eine atomare Operation kann Sperren verwenden. – knivil

0

Es ist nicht trügerisch diese Funktionen als solche zu nennen, aber man sollte immer noch ihre Semantik dokumentieren, vorzugsweise eine Art von einer formalen Beschreibung verwenden, die Gleichzeitigkeit Primitiven unterstützt.