linux - 多线程编程中的mutex
PHP中文网
PHP中文网 2017-04-17 16:28:49
0
3
855
#include <mutex>

int a;
char c;
std::mutex t;

int main()
{
    std::lock_guard<std::mutex> zz(t);
    a = 2;
    c = '1';
    return 0;
}

如上面这小段代码,请问c++11中的mutex,是不是只要mutex被锁住了,就是默认对所有的共享数据加上了锁?

PHP中文网
PHP中文网

认证0级讲师

모든 응답(3)
巴扎黑

잠금 범위는 잠금 범위에 따라 다릅니다. 따라서 테스트 프로그램에서는 기본 범위가 잠겨 있습니다.
물론 멀티스레딩에서는 사용되지 않기 때문에 샘플 프로그램 자체는 의미가 없습니다. 다중 스레드라고 가정합니다. 이때 다른 스레드는 뮤텍스를 잠그려고 할 때 뮤텍스 잠금이 해제될 때까지 기다려야 합니다. 이는 특정 시간에 하나의 스레드만 변수 a 및 c에 액세스할 수 있음을 의미합니다.

PHPzhong

잠금 후에는 현재 스레드가 잠금을 해제하지 않는 한 뮤텍스 잠금이 유지됩니다. 현재 스레드는 잠금을 획득하고 다음 실행 줄에 들어갈 때 이미 이 코드 줄을 실행했으므로 뮤텍스 잠금을 해제할 자격이 있습니다. . 잠금을 기다리는 다른 스레드는 운영 체제에 의해 대기 큐에서 깨어날 때까지 잠금이 해제되기 전에 이 코드 줄에서 잠자기 상태가 됩니다.

뮤텍스 잠금은 리소스 액세스를 제어합니다. 임계 영역에 들어가려면 잠금을 획득해야 합니다. 이때 스레드는 리소스를 소비할 수 있는 권한, 즉 공유 데이터를 수정할 수 있는 권한을 갖습니다. 임계 섹션을 종료하려면 잠금을 해제하고 실행을 계속하려면 다른 스레드에 대한 잠금을 해제해야 합니다.

巴扎黑

간단히 말하면 아닙니다. 뮤텍스는 일종의 잠금입니다. 하나의 스레드가 동시에 잠글 수 있도록 보장하지만 전역 변수를 제어하는 ​​방법은 자체 코드로 구현됩니다. 즉, 다른 스레드가 먼저 Mutex를 잠그려고 시도하지 않고 해당 전역 변수를 직접 수정하면 차단되지 않는다는 합의입니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿