• Ряд региональных провайдеров блокирует свои общественные Wi-Fi точки. Доступ только по своему логину
    +1
    Экономическая целесообразность: есть квартира ~100 м^2 в Уфе. За те же деньги можно купить котедж ~170-200 м^2 в 30 минутах от офиса. Климат резко-континентальный, летом как в сочах, есть горы. Расскажите, как с этим в Нерезиновой?

    Тут мегаприрода и горы! К ним каждые выходные можно ездить :)
  • JSR 133 (Java Memory Model) FAQ (перевод)
    0
    С этим согласен. Но без volatile из-за компиляторных оптимизаций ты можешь не прочитать новые данные записанные в память. В этом сходство. Хочешь читать память обновляемую, например, датчиком контроллера — будь добр объяви её volatile (ну или выключить оптимизацию прагмой), иначе можешь не получить того, что ожидаешь.

    Каноничный пример, когда stop может быть изменена в другом потоке/процессе
    int * stop = (int *) 0xBABABABA; *stop=0; while (!*stop) { /* do smth */ }

    может быть оптимизирован компилятором в
    while (1) { /* do smth */ }

    Практически всегда, когда какая-то область памяти может изменяться в другом потоке/процессе её следует объявлять с volatile. Не буду углубляться, сам могу уже не помнить всех тонкостей, давно не писал на C/C++. Есть немало хороших статей на тему.
  • JSR 133 (Java Memory Model) FAQ (перевод)
    0
    В С++ volatile запрещает компилятору оптимизировать доступ к памяти. Нужно оно если память может быть изменена другим потоком, процессом или если память, например, замаплена на регистр какого-то устройства. Т.е. сементика почти такая же. Есть ещё ключевое слово register, которое рекомендует компилятору разместить переменную в регистре.