23
내 질문에 ReentrantLock을 사용하면 synchronized 키워드가 제공하는 것과 동일한 관점에서 필드의 가시성이 보장되는지 여부가 언급됩니다. 예를 들어ReentrantLock을 통해 액세스 한 필드에 휘발성 키워드가 필요합니까?
, 다음 클래스 , sharedData이 동기화 된 키워드가 사용되는 휘발성 선언 할 필요가없는 분야이다.
class A
{
private double sharedData;
public synchronized void method()
{
double temp = sharedData;
temp *= 2.5;
sharedData = temp + 1;
}
}
ReentrantLock을 사용하는 다음 예제에서는 필드의 휘발성 키워드가 필요합니까?
class B
{
private final ReentrantLock lock = new ReentrantLock();
private volatile double sharedData;
public void method()
{
lock.lock();
try
{
double temp = sharedData;
temp *= 2.5;
sharedData = temp + 1;
}
finally
{
lock.unlock();
}
}
}
필자는 volatile 키워드를 사용하면 성능이 약간 저하 될 수 있다고 생각하지만, 올바르게 코딩하는 것이 좋습니다.
필드 호이 스팅으로 인한 'while (field)'과 관련하여이 조언이 사실입니까? – Pod
@Pod : while 루프가 잠금 장치와 상호 작용하는 방식에 대한 자세한 내용이 없으면 말할 수 없습니다. 특정 예제로 새로운 질문을 만들고 싶을 것입니다. –