可能重复:
c++ multithread
我使用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()
}
答案 0 :(得分:4)
您看到此行为是因为您在生成它们后立即加入每个线程。
当你加入一个线程时,你会阻塞直到线程终止。
答案 1 :(得分:0)
您正在生成两个线程,但第一个线程在第二个线程生成之前被连接(并销毁),因此您实际上只有一个线程一次运行。解决这个问题的方法是:
我还应该指出boost::thread为C ++提供了跨平台的多线程。