본문 바로가기

컴퓨터61

Thread Local Storage Thread Local Storage멀티 쓰레드 프로그래밍을 하다보면 불편한게 있다. 쓰레드별 고유한 전역변수(또는 정적변수) 사용하기가 어렵다는 것. 쓰레드를 그냥 만들면 쓰레드에게 주어진 혼자만의 공간은 지역적인 stack영역 뿐이다. 일반적인 전역변수는 다 공유되는 data영역에 저장된다. 그렇다고 힙에 만들어도 private 힙이 아닌 이상 역시나 공유되는 공간이다. 그렇다고 int하나를 위해서 private 힙을 만드는 것은 말이 안된다. 스레드가 특정 함수만을 반복적으로 수행하면 별로 필요없다고 생각할 수 도 있는데, 막상 없으면 아쉽고 쓸려면 없다. Thread Local Storage(이하 TLS)는 쉽게(?) 쓰레드별 저장공간을 마련해주는 방법이다.TLS의 원리https://msdn.mi.. 2015. 4. 26.
read-write lock Reader-Writer LockRead와 Write는 자원을 사용하는 일반적인 방법이다. 기존의 Mutex 방식 Lock은 같은 자원에 대해서 Read이건 Write이건 배타적인 사용방식을 고수했다. 자원을 Read하고 있으면 다른 스레드가 그 자원에 Write작업을 수행할 수 없고, 그 반대의 경우도 마찬가지이0다. 누군가 새로 메모리에 새로운 값을 입력하는 도중에 그 값을 읽으면 내용의 일관성이 깨지기 때문에 일견 타당할 수 있다. 하지만 Read와 Read의 관계에서 다시 한번 생각해보자. 단순 읽기 동작은 내용의 일관성을 해치지 않기 때문에 서로 동시에 같은 내용을 읽어도 동기화 문제가 발생하지 않는다. Read끼리는 락을 하지 않는다면, 좀더 자원을 효율적으로 사용할 수 있지 않을까? 이런 아.. 2015. 4. 26.
DeadLock Deadlock프로세스 또는 쓰레드는 운영체제(또는 다른 관리자)가 관리하는 자원(메모리, 파일, 디바이스 등등)을 사용하는데, 다중 프로세스/쓰레드 프로그래밍을 하면 이 자원을 공유하게 되는 일이 자주 발생한다. 각 쓰레드 또는 프로세스는 각기 독립적인 실행 흐름을 가지고 있기 때문에 자원에 동시 접근하는 경우가 발생할 수 있다. 공유자원이 비일관적으로 사용되는 것을 막기 위해서 자원의 관리자는 자원의 배타적 소유권을 유지하는 방법을 사용한다. Lock을 걸어서 여러 스레드가 동시에 공유자원을 사용하는 것을 막는 것이다. 그런데 관리자가 Lock을 잘못 사용하는 경우 어느 쓰레드도 자원을 영원히 사용할 수 없는 상태, 즉 Deadlock(교착상태)에 빠질 수 있다.Deadlock이 발생하는 이유위 그림.. 2015. 4. 25.
Effective C++ chapter 4 Effective c++ 정리 chapter 4 from 연우 김 2015. 4. 23.