Сообщение Re: барьеры памяти, многопоточность от 17.01.2015 22:04
Изменено 17.01.2015 22:24 vsb
Здравствуйте, stuav, Вы писали:
S>Я так понял исходя из статьи что читающие потоки могут получать не консистентное (не последнее) состояние globalMap
Читающие потоки могут получать не просто не последнее состояние, а в общем случае вообще самые причудливые состояния. TreeMap штука не тривиальная и что там может происходить без нормальной синхронизации – даже представить страшно.
Смоделировал вашу ситуацию. Перебор через entrySet часто падает с ConcurrentModificationException. Иногда с NullPointerException. простой get() исключений не кидает, но часто возвращает неверные результаты (не то значение, которое клали по данному ключу). Вот код: http://pastebin.com/P8QtD2R3 можете погонять у себя.
S>Я так понял исходя из статьи что читающие потоки могут получать не консистентное (не последнее) состояние globalMap
Читающие потоки могут получать не просто не последнее состояние, а в общем случае вообще самые причудливые состояния. TreeMap штука не тривиальная и что там может происходить без нормальной синхронизации – даже представить страшно.
Смоделировал вашу ситуацию. Перебор через entrySet часто падает с ConcurrentModificationException. Иногда с NullPointerException. простой get() исключений не кидает, но часто возвращает неверные результаты (не то значение, которое клали по данному ключу). Вот код: http://pastebin.com/P8QtD2R3 можете погонять у себя.
Re: барьеры памяти, многопоточность
Здравствуйте, stuav, Вы писали:
S>Я так понял исходя из статьи что читающие потоки могут получать не консистентное (не последнее) состояние globalMap
Читающие потоки могут получать не просто не последнее состояние, а в общем случае вообще самые причудливые состояния. TreeMap штука не тривиальная и что там может происходить без нормальной синхронизации – даже представить страшно.
Смоделировал вашу ситуацию. Перебор через entrySet часто падает с ConcurrentModificationException. Иногда с NullPointerException. простой get() исключений не кидает, но часто возвращает неверные результаты (не то значение, которое клали по данному ключу). Вот код: http://pastebin.com/P8QtD2R3 можете погонять у себя. Это, конечно, не совсем ваша ситуация, тут никакой синхронизации нет вообще. Но скорее всего у вас есть все шансы достать неверное значение в полнолуние.
Лучше сделать как положено.
S>Я так понял исходя из статьи что читающие потоки могут получать не консистентное (не последнее) состояние globalMap
Читающие потоки могут получать не просто не последнее состояние, а в общем случае вообще самые причудливые состояния. TreeMap штука не тривиальная и что там может происходить без нормальной синхронизации – даже представить страшно.
Смоделировал вашу ситуацию. Перебор через entrySet часто падает с ConcurrentModificationException. Иногда с NullPointerException. простой get() исключений не кидает, но часто возвращает неверные результаты (не то значение, которое клали по данному ключу). Вот код: http://pastebin.com/P8QtD2R3 можете погонять у себя. Это, конечно, не совсем ваша ситуация, тут никакой синхронизации нет вообще. Но скорее всего у вас есть все шансы достать неверное значение в полнолуние.
Лучше сделать как положено.