LINUX.ORG.RU

История изменений

Исправление Legioner, (текущая версия) :

если переменная типа int то гарантируется атомарное чтение/запись

Не гарантируется. Как минимум тебе там надо вставить volatile. Но тебе и это не поможет, т.к. ты не просто читаешь/записываешь, а производишь составную операцию: сначала читаешь, потом выполняешь другие команды, потом записываешь. И ты ожидаешь, что эта составная операция будет почему-то атомарной. Не будет.

никакими мьютексами ее защищать не надо.

Любую разделяемую память нужно защищать любо критическими секциями, либо использовать атомарные операции (например класс AtomicInteger). Очень редко можно обойтись volatile.

могли бы уж все автоматом сделать

Это привело бы к неописуемым тормозам. Если вообще возможно. К счастью не сделали.

Я тебе советую прочитать книгу Java Concurrency in Practice. Многопоточность это сложно и ты сам не разберёшься.

Исходная версия Legioner, :

если переменная типа int то гарантируется атомарное чтение/запись

Не гарантируется. Как минимум тебе там надо вставить volatile. Но тебе и это не поможет, т.к. ты не просто читаешь/записываешь, а производишь составную операцию: сначала читаешь, потом выполняешь другие команды, потом записываешь. И ты ожидаешь, что эта составная операция будет почему-то атомарной. Не будет.

никакими мьютексами ее защищать не надо.

Любую разделяемую память нужно защищать любо критическими секциями, либо использовать атомарные операции (например класс AtomicInteger).

могли бы уж все автоматом сделать

Это привело бы к неописуемым тормозам. Если вообще возможно. К счастью не сделали.

Я тебе советую прочитать книгу Java Concurrency in Practice. Многопоточность это сложно и ты сам не разберёшься.