История изменений
Исправление pr849, (текущая версия) :
Ну на вскидку, вот здесь:
status2 меняется между 0 и 4, а так же между 1-2-3 без write-lock1’а,
ты ничего не сказал, что там при этом с data. И вообще какой-то бардак: status2 это часть состояния (1)-(5). Если ты без write-lock1 можешь поменять status2 из 0 в 4, и при этом status == 0, то ты считай выполнил полу-недо-переход из (1) в (5): полу-недо- потому что data осталось null. Это называется «дооптимизироваться до мышей». :) Впилил бы spinlock на любые операции со структурой (пофиг что там только exclusive т.е. write lock, зато он копеечный). У меня ассоциация с SQL: я всегда везде выставляю transaction isolation = serializable и сплю спокойно.
Короче, главный косяк тут – это неряшливое обращение с автоматом состояний. Пофиг, простое у тебя состояние или составное; изволь менять его атомарно.
Исправление pr849, :
Ну на вскидку, вот здесь:
status2 меняется между 0 и 4, а так же между 1-2-3 без write-lock1’а,
ты ничего не сказал, что там при этом с data. И вообще какой-то бардак: status2 это часть состояния (1)-(5). Если ты без write-lock1 можешь поменять status2 из 0 в 4, и при этом status == 0, то ты считай выполнил полу-недо-переход из (1) в (5): полу-недо- потому что data осталось null. Это называется «дооптимизироваться до мышей». :) Впилил бы spinlock на любые операции со структурой (пофиг что там только exclusive т.е. write lock, зато он копеечный). У меня ассоциация с SQL: я всегда везде выставляю transaction isolation = serializable и сплю спокойно.
А вообще, главный косяк тут – это неряшливое обращение с автоматом состояний. Пофиг, простое у тебя состояние или составное; изволь менять его атомарно.
Исходная версия pr849, :
Ну на вскидку, вот здесь:
status2 меняется между 0 и 4, а так же между 1-2-3 без write-lock1’а,
ты ничего не сказал, что там при этом с data. И вообще какой-то бардак: status2 это часть состояния (1)-(5). Если ты без write-lock1 можешь поменять status2 из 0 в 4, и при этом status == 0, то ты считай выполнил полу-недо-переход из (1) в (5): полу-недо- потому что data осталось null. Это называется «дооптимизироваться до мышей». :) Впилил бы spinlock на любые операции со структурой (пофиг что там только exclusive т.е. write lock, зато он копеечный). У меня ассоциация с SQL: я всегда везде выставляю transaction isolation = serializable и сплю спокойно.