inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

SpinLock & Busy Waiting

SpinLock & Busy Waiting 강의 질문입니다.

262

bom

작성한 질문수 5

1

안녕하세요! 강의 너무 잘 듣고 있는 수강생입니다.

이전 동기화와 CPU의 관계 강의에서는 CPU가 두 개 이상의 명령어를 처리하면 원자성이 보장이 안된다고 설명을 하셨는데, SpinLock & Busy Waiting 강의에서 test_and_set(int *lock) 메서드는 CPU 하드웨어 계층에서 원자성이 보장된다는 게 이해가 잘 가지를 않습니다. test_and_set(int *lock) 이 메서드는 하나의 명령어만 처리하는 건가요??

java 동시성 multithread synchronisation

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 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