c ++多线程

时间:2010-04-27 03:25:40

标签: c++ multithreading

  

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

2 个答案:

答案 0 :(得分:4)

您看到此行为是因为您在生成它们后立即加入每个线程。

当你加入一个线程时,你会阻塞直到线程终止。

答案 1 :(得分:0)

您正在生成两个线程,但第一个线程在第二个线程生成之前被连接(并销毁),因此您实际上只有一个线程一次运行。解决这个问题的方法是:

       
  1. 创建一个单独的连接函数,调用join()。
  2.    
  3. 请勿直接从start()函数调用join。
  4.    
  5. 在您的join()函数中,请务必将该主题标记为已加入/销毁。
  6.    
  7. 在你的析构函数中,如果你的线程没有被连接,那么你应该将其分离。
  8. 我还应该指出boost::thread为C ++提供了跨平台的多线程。