!["천둥 떼" 문제는 무엇입니까? Spinlock을 사용한 후에도 경쟁 조건이 어떻게 발생할 수 있습니까?](https://linux55.com/image/179250/%22%EC%B2%9C%EB%91%A5%20%EB%96%BC%22%20%EB%AC%B8%EC%A0%9C%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20Spinlock%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%9C%20%ED%9B%84%EC%97%90%EB%8F%84%20%EA%B2%BD%EC%9F%81%20%EC%A1%B0%EA%B1%B4%EC%9D%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%B0%9C%EC%83%9D%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
~에서여기:
대기자 명단페이지를 해제하기 위해 대기 중인 프로세스의 대기 큐에 대한 해시 테이블입니다. 이는 wait_on_page() 및 Unlock_page()에 중요합니다. 모든 프로세스가 대기열에서 대기할 수 있지만 이로 인해 대기 중인 모든 프로세스가 깨어날 때 여전히 잠겨 있는 페이지를 놓고 경쟁하게 됩니다. 이와 같은 공유 리소스를 놓고 경쟁하는 대규모 프로세스 그룹을 때로 천둥 떼라고 합니다. 대기자 명단은 섹션 2.2.3에서 자세히 논의됩니다.
"thunder group" 문제는 무엇이며, 페이지에서는 스핀 잠금을 사용한다고 언급하는데, 스핀 잠금을 사용하더라도 경쟁 조건이 어떻게 발생할 수 있습니까? 경쟁하는 프로세스의 수가 정말 중요합니까? 내 생각에는 얼마나 많은 프로세스가 경쟁하든 상관없이 오직 하나의 프로세스만이 스핀 잠금을 잡고 경쟁 조건이 발생하지 않을 것입니다.
답변1
아니요 race condition
, 스핀 잠금 장치가 이를 보장합니다.
즉 thundering herd problem
, 일반적으로 잠금이 해제되거나 I/O 입력 이벤트가 완료되는 등의 일이 발생하면 기다리고 있던 많은 프로세스가 재개됩니다. 이들 중 하나가 선택되고 다른 모든 항목은 일반적으로 잠금 또는 I/O 이벤트 대기를 재개합니다.
기자회견을 생각해 보세요. 보고자가 답변을 마치면 모든 기자는 보고자의 관심을 끌기 시작합니다. 브리핑자는 한 명을 선택하고, 기자들은 모두 자리에 앉아 질문하고 답변을 한 뒤, 다시 한 번 주목을 끌기 위해 노력한다. 10명의 기자에게는 잘 통하지만, 10000명의 기자에게는 모든 기자가 관심을 끌기 위해 많은 에너지를 낭비하게 되고, 기자들이 줄을 서서 모두가 차례대로 질문을 함으로써 효율성을 높일 수 있다.
따라서 thundering herd
정확성보다는 효율성이 중요합니다.