Co oznacza metoda AtomicXXX.lazySet (wartość) w kategoriach zaistniałych wcześniej krawędzi, wykorzystywanych w większości przypadków rozumowania JMM? Javadocs jest czysta na nim, i Sun bug 6275329 stany:AtomicXXX.lazySet (...) pod względem występowania przed krawędziami
Semantyka to, że zapis jest zagwarantowane, aby nie zostać zreorganizowane z dowolnego poprzedniego zapisu, ale może zostać zreorganizowane z kolejnych operacji (lub równoważnie, może nie być widocznym dla innych wątków), dopóki nie wystąpi inna, lotna operacja zapisu lub synchronizacji).
Ale to nie jest rozumowanie na temat krawędzi HB, więc mnie to myli. Czy to znaczy, co semantyka lazySet() nie może być wyrażona w kategoriach krawędzi HB?
UPDATE: Postaram się skonkretyzować moje pytanie. mogę użyć zwykłego pola lotnego w następujący scenariusz:
//thread 1: producer
...fill some data structure
myVolatileFlag = 1;
//thread 2: consumer
while(myVolatileFlag!=1){
//spin-wait
}
...use data structure...
W tym zastosowaniu scenariusza „struktury danych” w konsument jest poprawna, ponieważ lotny flaga zapisu odczytu uczynić przewagę HB, co daje gwarancję, co wszystkie zapisy do „struktura danych "przez producenta zostanie zakończona i widoczna dla konsumenta. Ale co jeśli użyję AtomicInteger.lazySet/get zamiast volatile write/read w tym scenariuszu?
//thread 1: producer
...fill some data structure
myAtomicFlag.lazySet(1);
//thread 2: consumer
while(myAtomicFlag.get()!=1){
//spin-wait
}
...use data structure...
czy nadal będzie poprawny? Czy nadal mogę naprawdę zobaczyć widoczność wartości struktury danych w wątku konsumenckim?
To nie jest „z powietrza” pytanie - Widziałem taką metodę w kodzie Lmax Zakłócacza dokładnie w tym scenariuszu, a ja nie rozumiem, jak udowodnić, że jest poprawne ...
jeśli metoda lazySet działa jako bariera sklepu-sklepu, można z niej korzystać. Kiedy wątek2 zobaczy flagę, wszystko będzie w porządku, aby odczytać strukturę. LazySet zapewnia, że zapis będzie widoczny w pewnym momencie, a wszystkie architektury pozwalają na automatyczną widoczność, tj. Jeśli coś jest napisane, będzie widoczne i ostatecznie spójne. – bestsss