Potrzebuję pomocy w zrozumieniu synchronizacji - z relacją. Im więcej czytam, próbując zrozumieć przykład, tym bardziej czuję, że nic nie rozumiem. Czasami czuję, że to jest to, mam to, ale po obejrzeniu innego przykładu znowu się mylę. Proszę, pomóż mi to naprawić.synchronizuje się z semantyczną relacją, dzieje się przed i secesją uzyskującą
Mówi się, że operacja A synchronizuje się - z operacją B, jeśli A jest magazynem dla pewnej zmiennej atomowej m, z semantyką wyzwalającą, B jest obciążeniem z tej samej zmiennej m, z nabyciem semantyki, a B odczytuje wartość przechowywane A. mówi się również, że operacja typu a stanie, przed operacją z B jeśli
- a jest wykonywane w ten sam gwint jak B i a jest przed B w kolejności programowej lub
- a synchronizuje -z B, lub
- A stało się - przed wykonaniem jakiejś innej operacji C i C - przed B
OK. Jeśli spojrzymy na ten przykład:
wątek0 wykonuje | Wątek1 wykonuje
przechowywać x (wydanie) | Obciążenie x (nabywać)
ma sklep do X-tu zsynchronizować z obciążeniem od X? Jeśli mamy tutaj synchronizację - z relacją, to zapisujemy do x dzieje się przed ładowaniem z x, więc wszystko, co jest zsekwencjonowane przed zapisaniem do x w wątku 0, dzieje się - przed załadowaniem z x w wątku 1. Oznacza to wymuszone porządkowanie tutaj. Czy to jest poprawne? Ale w tym przypadku nie rozumiem, co oznacza "i B czyta wartość przechowywaną przez A" część definicji? Jeśli wątek 1 jest szybszy, wątek 0 może odczytać starą wartość. Jaka jest tu relacja i czy istnieje jakiś związek? Jeśli nie ma, jak mogę zapewnić tę relację?
Z góry dziękuję.
świetny artykuł jest tutaj http://preshing.com/20130823/the-synchronizes-with-relacja/ – camino