Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 티스토리챌린지
- WSL2
- ubuntu
- Visual SLAM
- 인공지능
- ROS
- 강화학습
- QT
- GPS
- 로봇
- 자율주행
- 아두이노
- SLAM
- U-blox
- Simulation
- turtlebot3
- 자율탐사
- RTK
- turtlesim
- 오블완
- 터틀심
- ZED2
- WSL
- C++
- Jetson
- GUI
- Gazebo
- 젯슨
- Puck LITE
- ROS2
Archives
- Today
- Total
직관적인느낌
C++ 쓰레드 기초 본문
728x90
반응형
쓰레드(Thread) 개념 요약
- 쓰레드란?
- 쓰레드는 운영 체제에서 실행되는 가장 작은 단위로, 하나의 프로세스 안에서 독립적으로 실행됩니다.
- 멀티스레딩(Multithreading)은 하나의 프로세스 내에서 여러 스레드를 동시에 실행하여 CPU 자원을 효율적으로 사용하는 방식입니다.
- 주요 개념
- 멀티스레딩: 여러 작업을 동시에 처리하여 성능을 높임.
- 컨텍스트 스위칭: 스레드 간 작업을 전환하는 과정.
- 동기화: 여러 스레드가 공유 자원을 안전하게 사용할 수 있도록 관리(Mutex, Semaphore 등 사용).
- 경합 상태(Race Condition): 스레드들이 공유 자원을 제대로 동기화하지 않아 발생하는 문제.
- 데드락(Deadlock): 스레드들이 서로 자원을 기다리면서 영원히 멈추는 상태.
- C++ 멀티스레딩 코드 요약
- std::thread: C++에서 스레드를 생성하고 실행하는 표준 라이브러리.
- std::this_thread::sleep_for: 스레드를 지정된 시간 동안 멈추게 하는 함수.
- join(): 스레드가 종료될 때까지 기다리도록 하는 함수.
- 추가 개념
- std::mutex: 여러 스레드가 동일한 자원을 사용할 때 경합 상태를 방지하기 위해 사용되는 동기화 도구.
- std::lock_guard: Mutex를 안전하게 관리하여 데드락을 방지하는 도구.
간단한 C++ 멀티스레딩 코드
#include <iostream>
#include <thread>
#include <chrono>
void print_numbers() {
for (int i = 1; i <= 5; ++i) {
std::cout << "Number: " << i << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
void print_letters() {
char letters[] = {'A', 'B', 'C', 'D', 'E'};
for (char letter : letters) {
std::cout << "Letter: " << letter << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(1500));
}
}
int main() {
std::thread thread1(print_numbers);
std::thread thread2(print_letters);
thread1.join();
thread2.join();
std::cout << "All threads are finished." << std::endl;
return 0;
}
이 코드는 두 개의 스레드를 생성하여 병렬로 실행하고, 두 스레드가 모두 종료될 때까지 기다린 후 프로그램을 종료합니다.
쓰레드를 사용할 때는 동기화 문제를 주의해야 하며, 필요에 따라 mutex와 같은 동기화 도구를 사용하여 자원 충돌을 방지해야 합니다.
추가적으로 중요한 개념
- Thread Pool: 여러 스레드를 직접 만들고 관리하는 것 대신, 미리 스레드를 만들어 두고 필요한 작업을 할당하는 방식입니다. 이를 통해 성능 최적화가 가능합니다.
- GIL(Global Interpreter Lock): Python에서 여러 스레드가 동시에 실행되는 것을 제한하는 메커니즘으로, 멀티스레드가 CPU 바운드 작업에서 성능을 제대로 활용하지 못하게 할 수 있습니다. 이는 특히 C 언어 등 다른 언어와의 차이점입니다.
쓰레드를 사용하는 것은 I/O 작업과 같은 경우에 유리하지만, CPU를 많이 사용하는 작업에서는 멀티프로세싱(Multiprocessing)이 더 나은 선택이 될 수 있습니다.
728x90
반응형
'공학' 카테고리의 다른 글
멀티프로세싱 완벽 가이드: 기초부터 고급까지 (0) | 2024.09.20 |
---|---|
멀티프로세싱과 멀티스레딩: 차이점, 장단점, 그리고 함께 사용하는 방법 (1) | 2024.09.20 |
스마트 팜/펙토리 와 에너지 효율 (0) | 2024.09.19 |
로봇의 회생제동 시스템 (0) | 2024.09.19 |
온도 상승으로 발생한 열 에너지를 전기 에너지로 변환하는 방법과 기술 (1) | 2024.09.19 |