C++/C++ 멀티스레드
-
C++ 멀티스레드, lock(mutex)C++/C++ 멀티스레드 2022. 10. 6. 21:07
저번 포스팅에서는 공유데이터에 대한 동시접근으로 인해 발생하는 문제를 해결하기 위한 방법으로 atomic을 사용해봤다. 오늘은 mutex라는 lock을 사용해 보겠다. 먼저 문제가 되는 상황을 살펴보면 이번에는 C++의 컨테이너 자료형 Vector가 멀티스레드 환경에서 동시에 접근되는 상황이다. 들어가기에 앞서 vector자료형에 대해서 간단히 살펴보면 1. 가변배열 2. 벡터의 size가 capacity만큼 커지면, 2-1. 새로운 메모리공간에 기존의 1.5~2배에 해당하는 capacity를 할당받고, 2-2. 새로운 메모리공간에 기존의 메모리에 있던 값들을 복사한다. 2-3. 기존의 메모리에 있던 값들을 지운다. #include #include #include #include vector v; voi..
-
C++ 멀티스레드, AtomicC++/C++ 멀티스레드 2022. 10. 5. 23:22
멀티스레드 환경에서의 작업은 동시에 다양한 작업을 가능케 하지만, 여러가지 문제도 존재하고, 그러한 문제들이 멀티스레드 프로그래밍을 어렵게 한다. 여러가지 문제점들 중 한 가지가 공유데이터에 대한 동시접근시 발생하는 문제다. #include #include #include int sum = 0; void Add() { for (int i = 0; i < 100000; i++) { sum++; } } void Sub() { for (int i = 0; i < 100000; i++) { sum--; } } void main() { Add(); Sub(); cout