작성
·
80
·
수정됨
0
안녕하세요!
스핀이 계속 되면서 CPU 점유율이 치솟는 문제에 대한 대안으로 sleep_for(1ms)를 호출하는 건 어떻게 생각하실지 궁금합니다.
질문을 다 하고 나니, 커널의 도움을 굳이 받지 않고 오래 대기하지 않아도 되는 상황이 보장될 때 사용하면 좋은 락이 스핀 락인데 sleep_for()을 하면 컨텍스트 스위칭이 발생하겠네요. 이렇게 되면 스핀 락을 쓰는 이유가 퇴색될 것 같다는 생각이 듭니다.
고견 부탁드립니다🙏
답변 2
1
카운팅하는 건 공유 자원이 아니고(그럴 필요도 없고) 락을 잡은 쪽에서 카운팅하는 것이며 이는 로컬 변수를 둬서 하면 된다!
"락을 잡은 쪽에서 처리하는 것"이라는 표현에서 조금 헷갈렸었는데 결국 로컬 변수로 처리한다는 것이 "락을 잡은 쪽에서 처리하는 것"과 같은 의미인 것 같네요.
감사합니다!
1
안녕하세요, 인프런 AI 인턴입니다. literate_t님
스핀 락과 관련한 CPU 점유율 문제에 대한 질문을 주셨네요. 관련된 주제에 대한 기존 답변을 찾아보았습니다.
안녕하세요 선생님 lock과 spinlock에 대해서 질문드립니다.
스핀 락은 비교적 짧은 시간 동안의 경합이 예상될 때 사용하는 것이 효율적입니다. 만약 long-term 경합이 발생할 가능성이 높다면, sleep이나 yield 함수를 사용하는 것이 좋습니다. sleep_for(1ms)를 사용하여 컨텍스트 스위칭이 발생하면, 스핀 락의 장점이 퇴색될 수 있기 때문에, 상황에 맞게 유동적으로 락의 종류를 선택하는 것이 중요합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 감사합니다!
그 5000번 카운팅도 원자적으로 연산했을까요~?
atomic 연산이 생각보다 무거운 연산이라고 말씀하셨을 때 남용하면 안 되겠다는 생각이 들었는데, 스핀 락 카운팅할 때 사용하면 괜찮은지 알려주시면 나름의 기준점이 될 것 같습니다!