2010-04-27 106 views
1

可能重複:
c++ multithreadC++多線程

我用C++實現線程類。代碼如下。 我初始化了兩個對象,希望它會啓動兩個線程(我使用pthread_self()來查看線程ID)。 但結果表明主線程旁邊只有一個線程。 我有點迷茫......

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()的單獨連接函數。
  2. 不要打電話直接從您的start()函數加入。
  3. 在你的加入()函數時,一定要標記線爲已加入/銷燬。
  4. 在你的析構函數,如果你的線程尚未加入,那麼你應該拆下。

我還應該指出,boost::thread爲C++提供了跨平臺多線程。