[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..
[C++] Process와 thread
2022. 10. 5. 23:34
Development/C++
오늘은 thread에 대해 알아보도록 하겠다. 스레드(thread)란 ? 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다. 모든 프로세스에는 한 개 이상의 스레드가 존재하고, 작업을 수행한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 두개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 한다. 프로세스(Process) 란? 간단하게 말하면 실행 중인 프로그램이라고 할 수 있다. 즉, 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것을 말한다. 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성된다. 프로세스와 스레드의 차이 우선 가장 큰 차이점으로 메모리 공유여부에 대한 부분이 다르다. 프로세스..