본문 바로가기

반응형

lock

(4)
[C++] 스레드 동기화 - lock_guard 들어가며 이전 포스트 '스레드 동기화 - mutex'에서는 C++ 표준 라이브러리에서 제공하는 std::mutex 객체의 lock, unlock 함수를 직접 호출하여 크리티컬 섹션에 진입할 수 있는 스레드를 직접 컨트롤 했었다. 하지만 이런 방법은 앞으로 살펴 볼 '실수'를 유발할 수 있고, 이 실수들은 데드락을 발생 시켜 프로그램을 영원히 블록 시킬수 있다. 이번 포스트에서는 std::mutex의 멤버 함수를 직접 호출할 때 야기할 수 있는 '실수'들을 살펴 보고, std::lock_guard를 사용했을 때의 이점에 대해 살펴 보도록 하겠다. std::mutex의 문제 위에서 std::mutex의 lock과 unlock 멤버 함수를 직접 호출하는 경우 프로그래머의 '실수'로 인해 프로그램이 데드락 상태..
[C++] 멀티스레드 환경에서 volatile의 유용한 사용법 얼마전 싱글톤 패턴 관련 책을 보다 volatile에 관한 내용을 읽고, 보다 정확한 용도에 대해 알기 위해 인터넷을 떠돌던중 Dr.Dobb's에서 volatile: The Multithreaded Programmer's Best Friend라는 흥미로은 아티클을 발견하여 한글로 옮겨 봅니다. 간단하게 내용을 요약하자면 volatile이라는 키워드의 특성을 이용하여 쓰레드간에 공유 되는 변수에 강제적으로 lock을 잡고 사용하도록하는 방법을 제시하고 있습니다. 스레드간 공유 되는 자원에 lock을 잡지 않고 사용하고자 한다면 컴파일 타임에 에러를 발생 시켜 런타임에 프로그램이 예측 되지 않는 동작을 하는 것을 방지해 줍니다. 들어가며 volatile 키워드는 비동기 이벤트 환경에서 컴파일러 최적화를 통해..
Condition Variables condition variables와 mutex를 같이 사용할 경우 condition variable은 임의의 상태(condition)이 발생하길 기다리는 race-free 한 방법을 제공 한다. condition과 mutex의 사용에 대한 간략한 개념을 이야기 하자면 : condition 자체는 mutex와 함께 사용되어야만 한다. mutex는 condition variable이 wait로 넘어가기 전의 초기화라던지 기타 등등에 대한 concurrency를 보장한다. condition variable 초기화 condition variable이 사용되기 전에 역시 다른 동기화 객체와 마찬가지로 초기화라는 것이 필요하다. C/C++에서 condition variable은 pthread_cond_t 데이터 ..
[C/C++] Read/Write lock Read/Write Lock의 개념 Read/Write Lock(이하 rwlock)의 기본적인 개념은 아래와 같이 간단하다. Read 작업은 값을 변경하지 않으니, 하나의 크리티컬 섹션에 여러개의 스레드가 진입해도 일관성 관련 문제가 발생하지 않는다. Write 작업은 값을 변경 할 수도 있으니, 하나의 크리티컬 섹션에 여러개의 스레드가 진입 할 경우 일관성이 깨질 수 있다. Read 작업은 여러개의 스레드가 하나의 크리티컬 섹션에 접근 가능하지만, Read하는 도중 값이 변경 되면 안된다. 위의 세 가지 사항 정도만 제외 한다면 rwlock은 mutex랑 비슷하다. 개념도 비슷하고, 사용법도 비슷하고, 하는 일도 비슷하다. rwlock의 장점은 read 작업에 있어서 여러개의 쓰레드가 서로 블록킹 하는..

반응형