Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / volatile sequental consistency / 14 сообщений из 14, страница 1 из 1
23.10.2017, 13:09
    #39540427
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency


Это картинка из видео
YouTube Video
...
Рейтинг: 0 / 0
23.10.2017, 13:31
    #39540451
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency
или эта нотация подходит такой код?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
public class SequintalConsistency {
    static volatile int r1;
    static volatile int r2;
    static CountDownLatch latch = new CountDownLatch(1);

    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    latch.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                r1 = 0;
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    latch.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                r2 = 0;
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    latch.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("r1=" + r1 + ", r2=" + r2);
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    latch.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("r1=" + r1 + ", r2=" + r2);
            }
        }).start();
        latch.countDown();
    }
}
...
Рейтинг: 0 / 0
23.10.2017, 14:16
    #39540479
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency
questioner


Не понял почему запрещен такой результат.

Эта нотация записи говорит, что r3 happens before r2 ?

Потому что он противоречит требованию sequential consistency, что и указано на слайде. Наверное стоило бы прочитать о SC хотя бы на википедии? Вот поражаюсь вам
...
Рейтинг: 0 / 0
23.10.2017, 14:23
    #39540487
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency
забыл ник,

Вопрос про форму записи же. Человек что-то объясняет основываясь на неё. Откуда википедия знает эту нотацию?
...
Рейтинг: 0 / 0
23.10.2017, 14:29
    #39540495
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency
questioner,

Что не так с формой записи? (r1,r2,r3,r4) = (some val, some val, some val, some val) стандартная запись того чему равны переменные после исполнения кода? Шипилев так и говрит, что ситуация когда 1,0,1,0 противоречит SO
...
Рейтинг: 0 / 0
23.10.2017, 14:35
    #39540503
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency
забыл ник,

я не говорю, что с ней не так что-то.

Я спрашиваю соответствует ли эта форму коду, что я написал.
...
Рейтинг: 0 / 0
23.10.2017, 15:12
    #39540549
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency
забыл ник,

Кстати что такое SO ?

Здесь же по сути 3 операции над каждой переменной. Может какая-то фишка, что переменных 2 ?

запись и 2 чтения над x(для y выглядит аналогично), которые никак не упорядочены.

Что мешает случиться чтению 0 потом случится запись, и потом чтение 1?
...
Рейтинг: 0 / 0
23.10.2017, 15:20
    #39540561
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency
questionerзабыл ник,

Кстати что такое SO ?

Здесь же по сути 3 операции над каждой переменной. Может какая-то фишка, что переменных 2 ?

запись и 2 чтения над x(для y выглядит аналогично), которые никак не упорядочены.

Что мешает случиться чтению 0 потом случится запись, и потом чтение 1?

С Вашим уровнем понимания не стоит лезть в эту тему. Всё одно ничего не получится.
...
Рейтинг: 0 / 0
23.10.2017, 15:25
    #39540566
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency
Alexey Tomin
С Вашим уровнем понимания не стоит лезть в эту тему. Всё одно ничего не получится.

Может таки снизойдёте?
...
Рейтинг: 0 / 0
23.10.2017, 15:29
    #39540572
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency
questionerзабыл ник,

Кстати что такое SO ?

Здесь же по сути 3 операции над каждой переменной. Может какая-то фишка, что переменных 2 ?

запись и 2 чтения над x(для y выглядит аналогично), которые никак не упорядочены.

Что мешает случиться чтению 0 потом случится запись, и потом чтение 1?

Фишка в том что не переменных 2, а потока. Ну и да, если один поток прочитал volatile переменную, то он должен увидеть все то, что произошло до этого чтения в рамках ЭТОГО потока. В этом и есть весь смысл volatile.
Для того чтобы увидеть 1,0,1,0 Нужно
1) Так как r1 устанавливается только в первом потоке, то чтобы она была = 1, y тоже должен быть один.
2) Значит y=1 уже выполнилось, ВСЕ, волатильная переменная прочиталась с последним значением, она уже не может в другом потоке оказаться 0(при условии что не было обратного присвоения y=0, а его не было по условию
3) r2 = x это также чтение волатильной переменной, тоже создает fence. По условию, r2 = 0, вследтсвие so, y на этот момент =1 и нету никаких инструкций которые могут это изменить.
4) r3=x По условия равно 1, значит произошло x = 1, так как y не могло поменяться то мы приходим к противоречию что r4 = 0

Точно также доказывается в обратную сторону.
Если бы не было so, то невозможно было бы написать даже простейший цикл в однопоточном приложении.
...
Рейтинг: 0 / 0
23.10.2017, 15:55
    #39540592
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency
забыл ник,

Да, понял, спасибо.

записи x и y упорядочены для других потоков.

Что-то полюбому случится раньше первая комбинация говорит, что сначала записался y потом мы в этом потоке сделали 2 чтения, потом только записался x

Но во втором примере x записался до y. Противоречие


Alexey Tomin


Видите, получилось
...
Рейтинг: 0 / 0
23.10.2017, 16:59
    #39540642
vimba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency
questionerНе понял почему запрещен такой результат.
Эта нотация записи говорит, что r3 happens before r2 ?

Этот слайд вообще не про happens-before order, согласно hb вариант (1,0,1,0) вполне легален.
А результат такой запрещен потому, что невозможно придумать synchronization order, который бы привел к такому результату. Когда проверяете осуществимость любого экзекьюшена всегда проверяйте валидность на оба порядка, про synchronization order многие часто забывают.
...
Рейтинг: 0 / 0
23.10.2017, 17:18
    #39540652
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency
vimbaquestionerНе понял почему запрещен такой результат.
Эта нотация записи говорит, что r3 happens before r2 ?

Этот слайд вообще не про happens-before order, согласно hb вариант (1,0,1,0) вполне легален.
А результат такой запрещен потому, что невозможно придумать synchronization order, который бы привел к такому результату. Когда проверяете осуществимость любого экзекьюшена всегда проверяйте валидность на оба порядка, про synchronization order многие часто забывают.

А можете пример придумать когда проверили happens-before - ок, а execution order не проверили и это стало причиной фейла?
...
Рейтинг: 0 / 0
23.10.2017, 17:47
    #39540669
vimba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
volatile sequental consistency
questioner,

не execution order, synchronization order. Я на практике, такого не встречал, выдумывать не хочу.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / volatile sequental consistency / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]