2010-04-27 3 views
1

가능한 중복 :
c++ multithreadC++ 멀티 스레드

내가 스레드를 구현하기 위해 C++를 사용합니다. 코드는 다음과 같습니다. 두 개의 객체를 초기화합니다. 두 개의 객체를 시작합니다 (스레드 ID를보기 위해 pthread_self()를 사용합니다). 그러나 결과는 주 스레드 옆에 스레드가 하나만 있음을 보여줍니다. 당신이 그 (것)들을 부르게 즉시 후 각각의 스레드에 가입하기 때문에 나는 조금 혼란 스러워요 ...

class Thread { 
public: 
    int mask; 
    pthread_t thread; 

    Thread(int); 
    void start(); 
    static void * EntryPoint (void *); 
    void Run(); 
}; 

Thread::Thread(int a) { 
    mask =a; 
} 

void Thread::Run() { 

    cout<<"thread begin to run" <<endl; 
    cout <<" Thread Id is: "<< pthread_self() << endl; // the same thread Id.  
} 

void * Thread::EntryPoint(void * pthis) { 
    cout << "entry" <<endl; 
    Thread *pt = (Thread *) pthis; 
    pt->Run(); 
} 

void Thread::start() { 

    pthread_create(&thread, NULL, EntryPoint, (void *)ThreadId); 
    pthread_join(thread, NULL); 
} 

int main() { 
    int input_array[8]={3,1,2,5,6,8,7,4}; 
    Thread t1(1); 
    Thread t2(2); 
    t1.start(); 
    t2.start() 
} 

답변

4

는이 동작을보고있다.

스레드와 결합하면 스레드가 종료 될 때까지 차단됩니다.

0

두 개의 스레드를 생성하지만 두 번째 스레드가 생성되기 전에 첫 번째 스레드가 결합 (및 파기)되므로 한 번에 하나의 스레드 만 실행됩니다. 이 문제를 해결하는 방법은 다음과 같습니다.

  1. join()을 호출하는 별도의 join 함수를 만듭니다.
  2. start() 함수에서 조인을 직접 호출하지 마십시오.
  3. join() 함수에서 스레드를 결합/소멸 된 것으로 표시해야합니다.
  4. 소멸자에서 스레드가 조인되지 않은 경우 스레드를 분리해야합니다.

또한 boost::thread은 C++ 용 플랫폼 간 다중 스레드를 제공한다는 점도 지적해야합니다.