C++多线程

问题描述:

可能重复:
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() 
} 

,因为你之后你每个线程加入菌种他们您看到此行为。

当您使用一个线程加入,你被阻塞,直到线程终止。

您产卵两个线程,但第一个线程,第二线程催生之前加入(和破坏),所以你必须有效地只有一个线程同时运行。解决这个问题的方法是:

  1. 创建一个调用join()的单独连接函数。
  2. 不要打电话直接从您的start()函数加入。
  3. 在你的加入()函数时,一定要标记线为已加入/销毁。
  4. 在你的析构函数,如果你的线程尚未加入,那么你应该拆下。

我还应该指出,boost::thread为C++提供了跨平台多线程。