Почему потоку нужен забор получения, чтобы прочитать простую запись, сделанную им в ресурс, которым он владеет?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему потоку нужен забор получения, чтобы прочитать простую запись, сделанную им в ресурс, которым он владеет?

Сообщение Anonymous »

Я загрузил код контекста здесь: https://gist.github.com/kusoroadeolu/ec ... ffaeef5c23
Я столкнулся с проблемой. Я потенциально это исправил, но это очень сбивает с толку.
Я добавил:

Код: Выделить всё

/*get_acquire read*/ if (ours.isApplied()) return ours.lpItem();
внутри блокировки, прежде чем объединитель снимет блокировку. Если я не включу чтение get_acquire перед чтением простой записи в качестве объединителя.

Код: Выделить всё

return ours.lpItem()
В этом сценарии только объединитель возвращает ложное нулевое значение (результат, который не должен быть нулевым), что может привести к проблемам. Я понимаю, почему мне нужно использовать чтение get_acquire для необъединителей, но я не понимаю, почему мне нужно делать это для объединителя (потока, удерживающего блокировку)?
Мое текущее рассуждение заключается в том, что объединитель применяет свой собственный узел во время сканирования с простой записью в элемент, и поскольку это тот же поток, читающий его обратно, я ожидаю, что порядок программы будет гарантировать видимость без какого-либо ограничения. Есть ли что-то, что мне здесь не хватает?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»