volatile
사용에 관한 질문이 있습니다. 일반적으로 스레드간에 공유되는 모든 변수는 직접 메모리 액세스를 보장하기 위해 volatile
키워드를 가지며 물론 뮤텍스로 보호됩니다.다중 스레드 응용 프로그램의 휘발성 C/C++
그러나 일관성을 보장하기 위해 변수를 공유하는 경우 volatile
이 실제로 필요합니까?
내가 예와 함께 설명 :
Thread1: //(affects it behaviour with the variable)
mymutex.lock();
if(variable)
{
...
variable = false;
}
mymutex.unlock();
위의 예에서
Thread2:
mymutex.lock();
variable = true;
mymutex.unlock();
, thread2
만 쓰고, thread1
는 읽기/쓰기. variable
이 캐시되고 스레드가 새 값을 읽을 수 없습니까? 뮤텍스가 제대로 설정 되었더라도? 이 경우 volatile
이 필요합니까?
변수 대신에 휘발성 일 수없는 std::vector
이 있기 때문에이 질문을드립니다. 그리고이 방법이 volatile
키워드 없이는 안전하다고 100 % 확신하지 못했습니다.
감사합니다.
EDITED : 질문을 올바르게 재구성합니다.
만큼 변수에 대한 액세스가 뮤텍스에 의해 보호로 사용, 보증 스레드 안전을 시도 휘발성 사용할 수 있습니다하지 말라 http://stackoverflow.com/questions/11172922/does-stdmutex-create-a-fence) –
그래서, 귀하의 의견을 파생. 뮤텍스/세마포어/CriticalSection 내에서 액세스되는 모든 변수는 잠금 해제 된 후에 플러시되고 다른 스레드에서 볼 수 있습니까? – DarkZeros
@DarkZeros 정확! 그것이 작동하는 방법입니다. –