История изменений
Исправление 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 должно поменяться.
Это называется «дооптимизироваться до мышей».
Ну да, наверно и так можно сказать, когда разные поля структуры лочатся разными локами и за всем этим надо следить.