LINUX.ORG.RU

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

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

Сказал выше, где состояния расписал - если меняется что-то кроме status2 то включается write-lock1.

Если ты без write-lock1 можешь поменять status2 из 0 в 4, и при этом status == 0, то ты считай выполнил полу-недо-переход из (1) в (5): полу-недо- потому что data осталось null.

Не, ну это совсем плохо было бы. В явную нарушения консистентности нигде не происходит. Все переключения только между указанными состояниями. То есть из (1) в (5) нельзя никак без write-lock1 и data должно поменяться.

Это называется «дооптимизироваться до мышей».

Ну да, наверно и так можно сказать, когда разные поля структуры лочатся разными локами, часть из них сторонние, и за всем этим надо следить. (научился этим фокусам пока лазил а ядре фрибсд, но там это наверно более необходимо, а тут - почему бы и нет, раз можно)

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

Сказал выше, где состояния расписал - если меняется что-то кроме status2 то включается write-lock1.

Если ты без write-lock1 можешь поменять status2 из 0 в 4, и при этом status == 0, то ты считай выполнил полу-недо-переход из (1) в (5): полу-недо- потому что data осталось null.

Не, ну это совсем плохо было бы. В явную нарушения консистентности нигде не происходит. Все переключения только между указанными состояниями. То есть из (1) в (5) нельзя никак без write-lock1 и data должно поменяться.

Это называется «дооптимизироваться до мышей».

Ну да, наверно и так можно сказать, когда разные поля структуры лочатся разными локами и за всем этим надо следить.