Page 27 -
P. 27

●   전역 변수 num을 만듭니다.

                       ●   각 스레드는 num에서 값을 하나씩 가져옵니다. 가져온 값이 소수인지 판별합니다.
                       ●   소수면 배열 primes에 찾은 숫자를 넣습니다.                                                1
                       ●   모든 스레드가 일을 마치고 나면 소수를 출력합니다.                                               멀티스레딩

                    그림 1-16은 이 과정을 코드로 표현한 것입니다.


                       그림 1-16 개선된 소수 찾기 프로그램
                                                     int num = 1;
                    main()                           Array<int> primes;
                    {
                      Array<Thread> threads;
                      for (i = 0; i < 4; i++)
                        threads.Add(BeginThread(ThreadProc));               TreadProc()
                                                                            {
                      for (i = 0; i < 4; i++)                                 while (num <= 1000000)
                      {                                                       {
                        threads.waitForExit();                                  if (Isprime(num))
                      }                                                           primes.Add(num);
                      printNumbers(primes);                                       num++;
                    }                                                         }
                                                                            }

                    그리고 실제 구동되는 코드를 만들어 봅시다.


                     코드 chapter_1\prime_number_errorneous
                      #include <vector>
                      #include <iostream>
                      #include <chrono>
                      #include <thread>
                      #include <memory>


                      using namespace std;

                      const int MaxCount = 150000;
                      const int ThreadCount = 4;

                      bool IsPrimeNumber(int number)
                      {
                          if (number = = 1)
                              return false;
                          if (number = = 2 || number = = 3)
                              return true;
                          for (int i = 2; i < number - 1; i++)

                                                                                                  035
   22   23   24   25   26   27   28   29   30   31   32