C++多线程
问题描述:
我用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()
}
答
,因为你之后你每个线程加入菌种他们您看到此行为。
当您使用一个线程加入,你被阻塞,直到线程终止。
答
您产卵两个线程,但第一个线程,第二线程催生之前加入(和破坏),所以你必须有效地只有一个线程同时运行。解决这个问题的方法是:
- 创建一个调用join()的单独连接函数。
- 不要打电话直接从您的start()函数加入。
- 在你的加入()函数时,一定要标记线为已加入/销毁。
- 在你的析构函数,如果你的线程尚未加入,那么你应该拆下。
我还应该指出,boost::thread为C++提供了跨平台多线程。