쓰레드 관련 명령어 정리 멀티쓰레드


쓰레드 생성 멀티쓰레드

멀티 프로세스 프로그래밍을 해야 하는이유?

현재 가장 많이 팔리는 CPU가  듀얼코어다. 듀얼코어란? CPU가 두개 달려있다는 것이지.
왜 CPU의 속도를 올려서 개발하면되지 CPU를 두개 붙힌것일까?? 뭐 그건 나같이 소프트웨어 개발자가 알아야 할 필요는 없지만
발열문제가 심각해져서 CPU 쿨럭속도를 올리는 비용보다 CPU를 냉각하는 비용이 엄청나게 든다고 한다.

아무튼 이러하여, CPU를 두개 이상 갖고 있는것이 보편화되어 버렸다.

이렇게된 결과, 우리 프로그래머들은 멀티프로세서CPU를 이용하려면 기존에 프로그래밍 방법으로 하면 이 좋은 CPU의 성능을 이용할수가 없다고 한다..ㅠㅠ 그럼 다시 배워야 하는것인가......

결론은 공부해야 한다. 그래야 살아남지.....

컴퓨터는 하나의 프로그램을 프로세스라고 표현한다. 각각의 프로세스는 하나의 쓰레드를 갖고 있다. 그리고 여러개를 갖을수도 있다. 우리는 이를 이용해서 CPU의 성능을 극대화 시켜야 한다.

프로세스와쓰레드
 - 프로그램은 하나의 프로세스가 되어서 실행된다.
 - 처음에는 하나의 쓰레드로 실행
 - 쓰레드는 다른 쓰레드를 만들 수 있다.
 - 하나의 쓰레드는 자신의 스택을 가지고 있고, Data와 Code를 공유한다.
 - 쓰레드는 CPU에서 하드웨어 적으로 관리한다.

쓰레드 프로그래밍 방법


싱글쓰레드프로그램
 
 - 2를5000만번더하는프로그램

#include <stdio.h>
int main()
{
    int sum = 0;
    for(int i = 0; i<50000000; ++i) 
        sum += 2;
    printf(“%d”, sum);
 }

멀티 프로세스 프로그램

 - 2를5000만번더하는프로그램

#include <windows.h>
#include <stdio.h>
int sum = 0;
DWORD WINAPI ThreadFunc(LPVOID lpVoid) //쓰레드가 하는일 정의
{
    for (int i=1;i<=25000000;i++) 
        sum += 2;
    return 0;
}
int main()
{
    DWORD addr;
    HANDLE hThread2 = CreateThread(NULL, 0, ThreadFunc, NULL, 0, &addr);  //쓰레드 생성
    HANDLE hThread3 = CreateThread(NULL, 0, ThreadFunc, NULL, 0, &addr);  //쓰레드 생성
    WaitForSingleObject(hThread2, INFINITE);  //쓰레드 종료 검사 
    WaitForSingleObject(hThread3, INFINITE);  //쓰레드 종료 검사 
    CloseHandle(hThread2);  //쓰레드 종료
    CloseHandle(hThread3);  //쓰레드 종료
    printf(“Result is %d\n", sum);
    getchar();
    return 0;
}

과연 결과가 제대로 나올까??




1