Page 16 -
P. 16

스레드를 생성하려면 운영체제나 런타임 라이브러리에서 제공하는 스레드 생성용 함수를 호출합
               니다. 이때 함수 인자로 스레드가 최초로 실행할 함수와 그 함수가 받아들일 매개변수를 넣어 주
               어야 합니다.

               다음 코드는 메인 스레드와 또 다른 스레드가 동시에 작동하는 예제 프로그램입니다.

               void main()
               {
                   // ➊ 스레드 시작
                   t1 = CreatThread(ThreadProc, 123);

                   // ➋ 오랫동안 무슨 일을 처리
                   // ...

                   // ➌ 스레드가 종료될 때까지 대기
                   t1.Join();

               // ➍ 함수 실행 끝
               }

               ThreadProc(int)
               {
                   // ➎ 오랫동안 무슨 일을 처리
                   // ...

               // ➏ 함수 실행 끝
               }

               프로그램을 실행하면 메인 스레드의 실행 지점은 일단 1부터 시작합니다. CreateThread()는 매개
               변수로 다른 함수와 그 함수가 받을 매개변수를 요구합니다. 그리고 새로운 스레드 1을 하나 생성
               합니다. 이 코드에서는 ThreadProc과 123을 인자로 받았습니다.

               이제 메인 스레드는 실행 지점이 ➋로 이동합니다. 한편 새로 생성되는 스레드 1은 ThreadProc()

               의 실행 지점 ➎로 이동할 것이고요. 즉, 여러분의 프로세스 안에서는 메인 스레드와 스레드 1이
               공존합니다.
               여기서 주의해야 할 점이 있는데, ➋와 ➎ 중 어느 것이 먼저 실행될지는 아무도 모른다는 것입니

               다. 디버거를 실행한 후 중단점을 ➋와 ➎에 모두 걸고 여러 차례 실행해 보세요. ➋와 ➎가 무작
               위로 실행될 것입니다. 물론 둘 중 하나만 실행되고 있을 수도 있겠지만, 이는 그저 한쪽이 실행
               확률이 높을 뿐이며 다른 시스템 환경에서는 다를 수 있습니다. 어쨌든 이론적으로는 ➋와 ➎ 중

               어느 것이 먼저 실행되는지 규정된 바가 없습니다.

         024
   11   12   13   14   15   16   17   18   19   20   21