해결된 질문
작성
·
523
·
수정됨
0
우선 질 좋은 강의를 무료로 볼 수 있게 해주셔서 감사합니다.
CPU 하나, 쓰레드 1, 2, 3 세 개가 있다고 가정해봅시다.
쓰레드 1의 release 함수에서 lock이 false가 되는 순간 2, 3에서 load lock 지시어가 연달아 두 번 실행된다면 모두 while 문을 빠져나오고 두 쓰레드가 동시에 임계 구역에 들어갈 수 있지 않을까요?
답변 1
0
안녕하세요!
(연휴 기간이라 답변이 늦었네요..^^;)
강의에서 제시한 뮤텍스 락은 자료에서 언급되었듯
뮤텍스 락의 원리를 이해하기 위한 단순화된 형태입니다.
실제로 프로그래밍 언어에서 지원되는 뮤텍스 락은 이보다 복잡하게 설계되는데요,
대표적인 것이
뮤텍스 락의 lock 부분의 구현입니다.
특정 작업을 원자적으로 수행하기 위한 CPU의 특별한 명령어들이 있습니다.
하단에 첨부드린 링크가 그 예시입니다. :)
예시로 들어주신 2개 이상의 스레드가 한 lock을 두고 경쟁해야 하는 상황이
이런 특정 작업을 원자적으로 수행해야 하는 상황에 속하지요.
(한 스레드가 lock을 acquire하고자 할 때 그 연산은 원자적으로 수행되어야 하니까요)
프로그래밍 언어 상에서 지원되는 lock의 경우 이런 원자적 연산을 수행할 수 있도록 구현되어 있습니다.
다만 이 부분은 컴퓨터구조/운영체제 기초 강의에서 다루기에는 조금 딥한 부분이 있어 따로 다루지는 않았슨비다.
좋은 질문 주셔서 감사합니다.
https://en.wikipedia.org/wiki/Compare-and-swap
https://developer.arm.com/documentation/dht0008/a/ch01s02s01