Насколько я знаю, видимость имеет дело с тем, в каком состоянии нить может наблюдать/видеть обновление для общей переменной (ов) другим потоком. Даже однопроцессорная система может пострадать от проблемы видимости. В процессе обработки заказов в какой последовательности поток просматривает операции памяти, выполняемые другим прогоном в другом ЦП. Однопроцессорная система не страдает проблемой заказа. Но я чувствовал, что иногда так называемая проблема заказа может быть интерпретирована с понятием Видимость, е, g.Каковы отношения/различия между видимостью и порядком?
//Thread1 runs
int data;
boolean ready;
void method1(){
data=1;
ready=true;
}
//Thread2 runs
void method2(){
if(ready){
System.out.print(data);
}
}
Если выход выше программы был «0» (а не «1»), можно сказать, что существует проблема заказа (т.е. изменение порядка) --- записываемый в готовпоявился должно быть зарегистрировано до записи до данные. Тем не менее, я думаю, что мы также можем интерпретировать этот результат в результате видимости: Thread2 впервые увидел обновление до по готовому по Thread1, а затем данные, возможно, из-за того, что буфер хранилища сбросился в кеш процессора, а если печать (данные) было выполнено до того, как Thread2 увидел обновление до данных, затем мы получили выход «0». Принимая это во внимание, я просто задаюсь вопросом, что такое разница/взаимосвязь между видимостью и порядком?
Посмотрите на это сообщение от Doug Lea о [Синхронизация и модель памяти Java] (http://gee.cs.oswego.edu/dl/cpj/jmm.html). Это хороший обзор об атомарности, видимости и всех порядках, которые могут отличаться по мере того, как вы ожидаете. Вот еще один автор того же автора о [JSR-133 - модели памяти Java] (http://gee.cs.oswego.edu/dl/jmm/cookbook.html). – SubOptimal
Я хотел бы добавить еще один (потому что я просто наткнулся на него) http://jpbempel.blogspot.fr/2013/05/volatile-and-memory-barriers.html – SubOptimal
Спасибо @SubOptimal, ваши рекомендуемые статьи хороши, и я прочитал их, прежде чем задал этот вопрос. – user2351818