Cosa significa metodo AtomicXXX.lazySet (valore) in termini di fronti before-before, utilizzato nella maggior parte dei motivi JMM? Il javadocs è puro su di esso, e Sun bug 6275329 stati:AtomicXXX.lazySet (...) in termini di accadimenti prima dei bordi
La semantica è che la scrittura è garantito di non essere riordinata con qualsiasi scrittura precedente, ma può essere riordinata con operazioni successive (o equivalentemente, potrebbe non essere visibile ad altri thread) finché non si verifica qualche altra azione volatile di scrittura o sincronizzazione).
Ma questo non è un ragionamento sui bordi HB, quindi mi confonde. Significa ciò che la semantica lazySet() non può essere espressa in termini di bordi HB?
UPDATE: Proverò a concretizzare la mia domanda. Posso usare campo volatili ordinaria nel seguente scenario:
//thread 1: producer
...fill some data structure
myVolatileFlag = 1;
//thread 2: consumer
while(myVolatileFlag!=1){
//spin-wait
}
...use data structure...
In questo uso scenario di "struttura dati" in consumatore è corretto, dal momento che la bandiera volatili scrittura-lettura rendere bordo HB, dando garanzia che cosa tutte le scritture di "struttura di dati "dal produttore sarà completato, e visibile dal consumatore. Ma cosa succede se userò AtomicInteger.lazySet/get invece di scrivere/leggere volatile in questo scenario?
//thread 1: producer
...fill some data structure
myAtomicFlag.lazySet(1);
//thread 2: consumer
while(myAtomicFlag.get()!=1){
//spin-wait
}
...use data structure...
sarà ancora corretto? Posso ancora realmente vedere la visibilità dei valori della "struttura dei dati" nel thread dei consumatori?
non è "dall'aria" questione - ho visto tale metodo in LMAX codice Disruptor esattamente questo scenario, e non capisco come dimostrarlo è corretta ...
se il metodo lazySet funge da barriera di store-store, è corretto utilizzarlo. Una volta che thread2 vede il flag, sarà ok leggere la struttura. Il lazySet assicura che la scrittura sia visibile ad un certo punto e tutte le architetture consentono la visibilità automatica, ad esempio se qualcosa è stato scritto sarà visibile ed eventualmente coerente. – bestsss