Page 29 -
P. 29

primes.push_back(n);
                                      }
                                  }
                              }));                                                                    1
                              // 스레드 객체를 일단 갖고 있는다.
                              threads.push_back(thread);                                              멀티스레딩
                          }


                          // 모든 스레드가 일을 마칠 때까지 기다린다.
                          for (auto thread : threads)
                          {
                              thread->join();
                          }
                          // 끝

                          auto t1 = chrono::system_clock::now();

                          auto duration = chrono::duration_cast<chrono::milliseconds>(t1 - t0).count();
                          cout << "Took " << duration << " milliseconds." << endl;

                          // PrintNumbers(primes);

                          return 0;
                      }



                    프로그램을 실행하면 안타깝게도 그림 1-17과 같은 오류가 발생합니다.

                       그림 1-17 무작정 시도한 멀티스레드 프로그래밍 오류





















                    왜 이러한 일이 발생할까요? 이를 이해하려면 스레드의 정체부터 알아야 합니다.


                                                                                                  037
   24   25   26   27   28   29   30   31   32   33   34