세 개의 스레드를 실행하는 응용 프로그램이 있습니다. 세 개의 스레드 모두 전역 변수의 상태에 따라 일부 작업을 수행합니다. 스레드 중 2 개가 동일한 코드를 실행하고 1 개의 스레드가 다른 코드를 실행 중입니다.다중 스레드 환경에서 전역 데이터 동작, C++
예는 : 응용 프로그램이 시작된 후
글로벌 변수의초기 값으로 인해 gGlobalVarLock의 초기화 거짓 값으로,
gGlobalVarLock = false;
thread 1:
while(true == gGlobalVarLock)
{
/*wait for flag to become false*/
}
/*after the flag becomes false*/
{
mutex.lock();
gGlobalVarLock = true;
/*run some code*/
gGlobalVarLock = false;
mutex.unlock();
}
thread 2 and 3,
while(true == gGlobalVarLock)
{
/*wait for flag to become false*/
}
/*after the flag becomes false*/
{
mutex.lock();
gGlobalVarLock = true;
/*run some other code*/
gGlobalVarLock = false;
mutex.unlock();
}
이제 거짓, 스레드 중 하나가 실행을 시작하고는 락 실행중인 다른 스레드. 내 이해에 따라 위의 구현은 어떻게 든 gGlobalVarLock이 실행 스레드에 의해 잠겨 있는지 확인하고 특정 스레드에 대한 mutex.lock() 아래의 코드가 실행되면 다른 스레드가 해당 스레드에 액세스하지 못하도록합니다. 그것은 또한 잠금 아래에 전역 변수를 잠그고있는 것 같습니다. 하지만 어떻게해야할지 모르겠다.
내 코드가 정상적으로 작동하는 것 같습니다. 하지만 나는 의심의 여지가있다. 뮤텍스는 스레드 2와 3에 대한 코드를 잠그기 때문에이 두 스레드는 동일한 코드를 사용하기 때문에 실행됩니다. 그러나 코드 1을 실행중인 스레드 1의 경우 잠금은 어떻게 작동합니까? 해당 스레드의 mutex.lock()은 mutex.lock()에서 코드를 실행할 때 다른 스레드에 대해 gGlobalVarLock이 잠겨 있는지 확인합니다. 해당 뮤텍스가 gGlobalVarLock이 다른 코드 일부를 실행하는 다른 스레드로 변경되지 않도록 보장합니까? 내 이해 mutex.lock() 다른 스레드에 의해 사용되는 일반적인 코드를 잠급니다. 그렇다면 다른 스레드가 다른 코드를 실행하는 경우 내 전역 변수가 어떻게 잠기는 지 확인하십시오.
mutex.lock()은 다중 스레드 환경에서 전역 변수를 잠급 시킵니까?
도중에 뮤텍스 유형을 보거나 말하지 않았습니다. –
이 스레드를 가지고 내 응용 프로그램에서 전역 뮤텍스 – Sushant