퍼온 델파이/C++Builder 강좌
다른 커뮤니티 사이트 등에서 퍼온 델파이 및 C++Builder에 대한 강좌나 팁을 올리는 공간입니다.
글 수 352
| 출처 | http://devnote.net/wiki/index.php/Spinlock |
|---|---|
| 글쓴이 | 해당 홈페이지의 운영자 |
퍼온이주: 쓰레드 동기화를 하는 방법 중에 SpinLock 이라는 방법도 있습니다. 그래서 정확히 그것이 무엇인지 궁금해서 인터넷 검색을 하던 중 다음과 같이 좋은 글을 보게 되었습니다.
기다린다는 것은 매우 재미있는 행동이다. 누구도 두배로 빨리 기다릴 수는 없다. - 다익스트라 (1984년 2월 28일)
Spinlock은 이름이 뜻하는대로, 만약 다른 스레드가 lock을 소유하고 있다면 그 lock이 반환될 때까지 계속 확인하며 기다리는 것이다.
Spinlock은 다음과 같은 특성을 갖는다.
1. Lock을 얻을 수 없다면, 계속해서 Lock을 확인하며 얻을 때까지 기다린다. 이른바 바쁘게 기다리는 busy wating이다.
2. 바쁘게 기다린다는 것은 무한 루프를 돌면서 최대한 다른 스레드에게 CPU를 양보하지 않는 것이다.
3. Lock이 곧 사용가능해질 경우 컨택스트 스위치를 줄여 CPU의 부담을 덜어준다. 하지만, 만약 어떤 스레드가 Lock을 오랫동안 유지한다면 오히려 CPU 시간을 많이 소모할 가능성이 있다.
4. 하나의 CPU나 하나의 코어만 있는 경우에는 유용하지 않다. 그 이유는 만약 다른 스레드가 Lock을 가지고 있고 그 스레드가 Lock을 풀어 주려면 싱글 CPU 시스템에서는 어차피 컨택스트 스위치가 일어나야하기 때문이다.
기다린다는 것은 매우 재미있는 행동이다. 누구도 두배로 빨리 기다릴 수는 없다. - 다익스트라 (1984년 2월 28일)
Spinlock은 이름이 뜻하는대로, 만약 다른 스레드가 lock을 소유하고 있다면 그 lock이 반환될 때까지 계속 확인하며 기다리는 것이다.
Spinlock은 다음과 같은 특성을 갖는다.
1. Lock을 얻을 수 없다면, 계속해서 Lock을 확인하며 얻을 때까지 기다린다. 이른바 바쁘게 기다리는 busy wating이다.
2. 바쁘게 기다린다는 것은 무한 루프를 돌면서 최대한 다른 스레드에게 CPU를 양보하지 않는 것이다.
3. Lock이 곧 사용가능해질 경우 컨택스트 스위치를 줄여 CPU의 부담을 덜어준다. 하지만, 만약 어떤 스레드가 Lock을 오랫동안 유지한다면 오히려 CPU 시간을 많이 소모할 가능성이 있다.
4. 하나의 CPU나 하나의 코어만 있는 경우에는 유용하지 않다. 그 이유는 만약 다른 스레드가 Lock을 가지고 있고 그 스레드가 Lock을 풀어 주려면 싱글 CPU 시스템에서는 어차피 컨택스트 스위치가 일어나야하기 때문이다.






