![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 30.03.2011
Сообщений: 36
|
![]()
Добрый вечер.
Нашел такой пример и в нем действительно без volatile потоки не останавливаются Код:
Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,829
|
![]()
Потому что тут есть запись и компилятор это заметил, и не стал кэшировать.
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
![]()
Thread.sleep(500);
скорее всего, но все равно там ничего не гарантиравано без volatile. Что-то измените и все сломается. Кросс-потоковое общение должно быть обязательно синхронизировано неким способом (там их несколько), в яве 1 из них volatile. Вообще, отстутствие явной верной сихронизации м-у потоками так и проявляется - случайно что-то не так. Например, на 1 процессоре все ок, на 4 процессорах - все сломалось не понять как. Т.е. как только полезло "не понять что", начинаем проверять все между-поточные передачи данных и делать их верно синхронными. Последний раз редактировалось alexzk; 08.03.2018 в 21:09. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 30.03.2011
Сообщений: 36
|
![]() |
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
volatile говорит компилятору что значение может изменится в ином потоке, он отключает кеширование результата обращения. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#6 | |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
![]() Цитата:
http://alenacpp.blogspot.com/2006/04/volatile.html где ничего как раз не гарантируется - т.е. просто не оптимизируем и все. А вот в яве https://ru.stackoverflow.com/questio...le-%D0%B2-java это уже атомарная операция. Но лично я всегда делал так: private final AtomicBoolean isSome = new AtomicBoolean(false); |
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
главное это пункт 2 ответа, а не 1.
без этого модификатора, компилятор/JIT может оптимизировать чтение, это и в Java мире так же. атомарность уже отличается, да(в С++ не гарантируется к примеру) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 09.03.2018 в 02:35. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
volatile | 220Volt | Общие вопросы C/C++ | 8 | 08.02.2013 08:44 |
Объясните разницу модификаторов CONST и VOLATILE | svatorus | Помощь студентам | 0 | 07.06.2012 13:13 |
Разобраться | Nempak | Общие вопросы C/C++ | 2 | 27.03.2011 14:06 |
Interlocked-функции и volatile. Необходимость совместного использования. | neokoder | Win Api | 0 | 21.03.2011 22:06 |