SpinLock & Busy Waiting 강의 질문입니다.
262
작성한 질문수 5
안녕하세요! 강의 너무 잘 듣고 있는 수강생입니다.
이전 동기화와 CPU의 관계 강의에서는 CPU가 두 개 이상의 명령어를 처리하면 원자성이 보장이 안된다고 설명을 하셨는데, SpinLock & Busy Waiting 강의에서 test_and_set(int *lock) 메서드는 CPU 하드웨어 계층에서 원자성이 보장된다는 게 이해가 잘 가지를 않습니다. test_and_set(int *lock) 이 메서드는 하나의 명령어만 처리하는 건가요??
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
질문하신 test_and_set(int *lock) 메서드에 대해 설명드릴게요. 일반적으로 test_and_set은 하드웨어 명령어를 사용하여 구현되며, 이 명령은 원자적 연산을 수행합니다.즉, test_and_set명령어는 한 번에 하나의 명령어로 처리되며, 이 과정에서 원자성이 보장됩니다.원자성이 보장된다는 것은 해당 명령어가 중단되지 않고 시작부터 끝까지 완전히 수행된다는 의미이며, 이로 인해 동시에 여러 프로세스나 스레드가 test_and_set을 호출하더라도, 각 호출은 서로에게 영향을 주지 않고 안전하게 lock의 상태를 검사하고 설정할 수 있습니다.
따라서, test_and_set(int *lock) 메서드는 CPU의 하단에서 동작하는 원자적 연산을 통해 구현되므로, 다수의 명령어가 동시에 실행되더라도 원자성이 보장되는 것입니다. 원자적 연산이란 중단될 수 없는 가장 작은 작업 단위를 말합니다. SpinLock에서 이러한 메서드를 사용하는 이유는 여러 스레드가 동시에 lock을 획득하기 위해 경쟁할 때, 하나의 스레드만이 성공적으로 lock을 획득하고 나머지 스레드는 대기 상태로 전환되게 하기 위함입니다.
원하시는 답변을 드릴 수 있었기를 바랍니다. 추가적인 궁금증이 있으시면 언제든지 질문해 주세요!
멀티스레드 단일스레드
0
56
0
new Condition 부분 질문
0
83
1
13:00 강의 내용 이해 질문
0
99
1
강의 출시 질문 있습니다.
0
117
1
InterruptedExceptionThreadStopExample 질문입니다.
0
94
2
instance.getMyField()의 값이 왜 다른가요?
0
115
1
해당 강의 내용 무단 도용 신고
0
211
2
Thread Waiting 상태 관련 질문 드립니다.
0
186
1
단일연산변수 api
0
126
0
synchronized 블럭과 메인메모리 반영
0
147
0
실무에서 자바가 제공하는 락을 사용하는 경우
1
243
1
뮤텍스나 세마포어는 busy waiting이 없는 게 맞을까요?
0
159
1
16:50부분에서 타입락 질문드립니다.
0
110
2
16분 7초 뮤텍스 코드 관련해 질문드립니다.
0
160
2
동기화가 보장된다고 하더라도 스레드간 데이터 불일치가 발생할 수 있지 않나요??
0
199
2
리액티브-part2
0
180
2
문자열 풀 값을 이용한 String 변수
0
207
2
스레드 라이브러리는 커널과 같은 역할을 하지 못하나요?
0
173
1
자식 프로세스를 쓰는 이유
0
186
1
커널 모드 전환시 질문이 있습니다!
0
146
1
[공유] setName 시 threadName이 1부터 시작하는 이유
0
178
1
synchronized = 모니터
0
285
2
Thread의 Context Switching 문의드립니다.
1
257
1
동기 & 논블록킹 질문 드립니다.
0
232
2





