[C++] Lock(std::lock_guard, std::unique_lock)
2022. 10. 14. 01:37
Development/C++
저번 포스트에서 멀티 쓰레드 프로그래밍시 race condition에 의해 공유 자원을 사용하는 critical section에 자원을 동시에 접근했을때 문제가 생기는것을 알아보았다. 이런 상황을 방지할 때 사용할 수 있는 mutex라는것에 대해서도 알아보았다. 이번 포스트에서는 아래와 같은 것에 대해 공부해보고자 한다. 1. mutex.lock()을 걸어두고, mutex.unlock()을 해주지 않았을때 어떠한 문제가 발생하는지 2. 위의 문제를 방지하기 위한 유용한 것들 mutex unlock을 해주지 않았을때 발생하는 문제점 저번 포스트에서 mutex를 공용 화장실에 자물쇠에 비유했었다. 동일하게 mutex를 자물쇠라고 생각했을때, lock()을 한 상황은 어떤 한 사람이 화장실에 들어가서 문을 잠..
[C++] Mutex
2022. 10. 8. 01:28
Development/C++
이전 포스트에서 std::thread를 이용하여 멀티 스레드를 사용해보았다. 포스트의 마지막에 말했던 멀티 스레드 프로그래밍을 하면서 주의해야 할 점에 대해 알아보려고 한다. thread를 처음 사용시 예상하지 못하는 문제점 우선, thread는 process와 다르게 스택 메모리를 제외한 나머지 힙, 코드, 데이터 영역을 공유한다. 아래와 같은 코드를 작성하고 출력되는 결과를 한번 예상해보자. #include #include #include using namespace std; int num; void addNum() { num++; } int main() { vector vThread; for(int i = 0; i < 5; i++) { vThread.push_back(thread([]() { for..