멀티스레드
-
파이프라인과 멀티스레드C++/C++ 기타 2022. 10. 25. 22:25
오늘은 파이프라인의 개념에 대해서 간단히 알아보겠습니다. 컴퓨터구조에서 파이프라인 개념의 핵심은 코드의 실행순서가 임의로 바뀔 수 있다는 것입니다. CPU에서는 Fetch Decode Excute Write-Back 의 순서로 명령이 실행 됩니다. 그런데, 실행순서가 바뀌어도 서로 연관이 없는 명령들이라면 순서를 바꿈으로써 속도가 더 빨라질 수 있다면 CPU는 임의로 실행순서를 바꾸기도 합니다. 예를 들어서 int x=5; y=y+1; 과같은 코드는 두 순서를 바꾸어도 아무런 문제가 없습니다. 그래서 필요하다면 순서가 바뀌기도 하는거구요. 이게 싱글스레드 상황에서는 아무런 문제가 발생하지 않습니다. 그런데 멀티스레드 상황이라면 이야기가 달라집니다. int x = 0; int y = 0; int r1 = ..
-
C++ Conditional Variable(조건변수)C++/C++ 멀티스레드 2022. 10. 14. 12:54
C++표준에서 제공하는 Conditional Variable을 이용하면 멀티스레드간 동기화를 구현할 수 있습니다. 조건변수를 사용하는 대표적인 패턴인 생산자-소비자 패턴을 예시로 들어보겠습니다. #include #include #include #include #include queue q; mutex m; void Producer() { while (true) { { unique_lock lock(m); int pushData = rand() % 100; q.push(pushData); cout
-
C++, Sleep을 이용한 Lock구현C++/C++ 멀티스레드 2022. 10. 10. 11:52
이전 포스팅에서는 spinlock을 구현해봤다. spinlock은 lock을 얻기위해서, 기한없는 대기를 하는 방법이다. https://bethetitan.tistory.com/9 C++ SpinLock구현 SpinLock은 앞선 포스팅에서 말한 존버메타 lock이다. 즉, lock을 다른 스레드가 사용중이면, 그 앞에서 lock이 풀릴때까지 계속 기다리는 것이다. 이거를 한 번 구현해보자. 들어가기에 앞서, 멀티스 bethetitan.tistory.com spinlock을 이용할 경우, CPU를 더 효율적인 곳에 사용하지 못하고, 가만히 놀게 하는 것과 다름없으므로, lock을 가진, thread가 lock을 빨리 해제하지 않는 경우에는 비효율적이라는 단점이 있다. 그래서 오늘은 lock이 잠겨있다면,..