멀티스레드

나무에물주기·2023년 5월 12일
1
post-thumbnail

멀티스레드란?

멀티스레드는 프로그램에서 독립적으로 실행되는 최소한의 처리 단위인 스레드를 여러 개 사용하여 동시에 작업을 수행하는 것을 말한다. 멀티스레드를 사용하면 시스템의 자원을 보다 효율적으로 사용할 수 있으며, 작업의 처리 속도를 높일 수 있다.

멀티스레드 예제 코드

아래 코드는 멀티스레드를 사용하여 두 개의 함수를 동시에 실행하는 방법을 보여준다.

// ... 

#include <thread>

// 첫 번째 함수: HelloThread
// 출력: "Hello Thread"
void HelloThread()
{
	cout << "Hello Thread" << '\n';
}

// 두 번째 함수: HelloThread_2
// 입력: int32 num (정수형 변수)
// 출력: 입력받은 num 값
void HelloThread_2(int32 num)
{
	cout << num << '\n';
}

int main()
{
	//HelloThread();
	vector<std::thread> v;

	// for문을 사용하여 총 10개의 스레드를 생성합니다.
	for (int32 i = 0; i < 10; i++)
	{
		// 각 스레드는 HelloThread_2 함수를 실행하며, i 값을 인자로 전달합니다.
		v.push_back(std::thread(HelloThread_2, i));
	}

	// 생성된 10개의 스레드를 join()을 통해 메인 스레드와 동기화합니다.
	// 이를 통해 각각의 스레드가 작업을 완료한 후 메인 스레드가 진행되도록 합니다.
	for (int32 i = 0; i < 10; i++)
	{
		if (v[i].joinable())
			v[i].join();
	}

	// 모든 스레드가 종료된 후 메인 스레드에서 "Hello Main"을 출력합니다.
	cout << "Hello Main" << '\n';
}

멀티스레드의 장점

  1. 시스템 자원을 보다 효율적으로 사용할 수 있다.

  2. 작업 처리 속도를 높일 수 있다.

  3. 독립적인 작업을 수행할 수 있으므로 코드의 구조가 깔끔해질 수 있다.

멀티스레드의 단점

  1. 경쟁 상황 (race condition)이 발생할 수 있다.

  2. 동기화를 위한 추가 작업이 필요하다 (예: mutex(lock), semaphore 등).

  3. 스레드 생성 및 종료에 대한 오버헤드가 존재한다.

  4. 디버깅이 어려울 수 있다.

결론

멀티스레드는 시스템 자원을 효율적으로 사용하고 작업 처리 속도를 높이는 데 도움이 되지만, 동시에 race condition과 같은 문제를 해결하기 위한 동기화 작업이 필요하다. 이 예제에서는 10개의 스레드를 생성하여 동시에 작업을 수행하고, join() 함수를 사용하여 메인 스레드와 동기화하는 방법을 보여주었다. 멀티스레드 프로그래밍을 할 때는 스레드 간의 데이터 공유 및 동기화 문제에 주의하여야 한다.

profile
개인 공부를 정리함니다

0개의 댓글