LINUX.ORG.RU

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

Исправление 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 и сплю спокойно.