인프런 커뮤니티 질문&답변

한규빈님의 프로필 이미지
한규빈

작성한 질문수

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

SpinLock & Busy Waiting

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

작성

·

178

·

수정됨

1

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

이전 동기화와 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을 획득하고 나머지 스레드는 대기 상태로 전환되게 하기 위함입니다.

원하시는 답변을 드릴 수 있었기를 바랍니다. 추가적인 궁금증이 있으시면 언제든지 질문해 주세요!

한규빈님의 프로필 이미지
한규빈

작성한 질문수

질문하기