Was ist Upgrade / Downgrade von ReentrantReadWriteLock?

8

Was ist Upgrade / Downgrade von ReentrantReadWriteLock ? Ich sehe javadoc über Upgrade / Downgrade:

"Lock downgrading: Reentrancy ermöglicht auch das Herunterstufen von der Schreibsperre zu einer Lesesperre, indem die Schreibsperre, dann die Lesesperre und dann die Schreibsperre aufgehoben werden. Ein Upgrade von einer Lesesperre auf die Schreibsperre ist jedoch nicht möglich. "

Und eine Probe zur Verfügung gestellt:

%Vor%

Ich weiß, dass es sich um die Beziehung zwischen readLock und writeLock handelt, aber ich konnte das klare Konzept nicht aus dem Dokument bekommen. Könnten Sie mir ein wenig mehr Erklärung geben? Danke!

    
卢声远 Shengyuan Lu 21.02.2011, 05:17
quelle

1 Antwort

12

Ich glaube, dass in diesem Zusammenhang die Idee von "upgrade" und "downgrading" auf der Idee beruht, dass die Lesersperre in gewisser Weise eine "schwächere" Sperre als die Schreibsperre ist. Wenn die Schreibsperre akquiriert wird, können keine anderen Threads die Sperre in irgendeiner Form erlangen, während bei einer Lesesperre ein beliebiger anderer Thread die Lesesperre erhalten kann, wenn er möchte.

Hier bedeutet "Herunterstufung" der Sperre, dass Sie, wenn Sie die Schreibsperre halten, durch Drücken der Lesesperre auf die Lesesperre schalten können und dann die Schreibsperre aufheben. Dies bedeutet, dass Sie einen Thread haben können, der mit etwas Kritisch Wichtigem beginnt (etwas, das andere Threads daran hindern würde), zu arbeiten und dann zu der Sperre mit niedrigerer Priorität (der Lesesperre) zu wechseln, ohne jemals ohne die Sperre zu sein . Auf diese Weise können Sie die Sperre kontinuierlich halten, ohne dass Sie eine Vorabsperre erhalten.

Der andere Weg funktioniert jedoch nicht - sobald Sie die Lesesperre halten, können Sie nicht auf die wichtigere Schreibsperre "upgraden", indem Sie versuchen, die Schreibsperre zu erhalten. Wenn Sie dies versuchten, blockierte der Thread so lange, bis er unterbrochen wurde.

Hoffe, das hilft!

    
templatetypedef 21.02.2011, 05:25
quelle

Tags und Links