• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

24.05.08 16:17 작성 24.05.08 16:35 수정 조회수 59

1

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

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

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.05.10

안녕하세요, 인프런 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을 획득하고 나머지 스레드는 대기 상태로 전환되게 하기 위함입니다.

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