从pthread c ++中丢失打印

时间:2014-12-08 12:37:13

标签: c++ multithreading c++11

我开始使用C ++的pthread并为多线程做了一个简单的例子(3)。但我所看到的是我总是从两个线程获得打印。为什么呢?

#include <iostream>
#include <string>
#include <pthread.h>
using namespace std;

int N=10;

void* run(void* arg) {  

  char* msg = (char*)arg;

  for(int i; i<=N; ++i) std::cout<<msg<<std::endl;
}

int main(int argc, char* argv[]) {

  if (argc > 1) N = stoi(argv[1]);

  pthread_t t1,t2,t3;

  pthread_create(&t1,NULL,run,(void*)"xxx");
  pthread_create(&t2,NULL,run,(void*)"    howdy");
  pthread_create(&t3,NULL,run,(void*)"          wrold");

  pthread_join(t1,NULL);
  pthread_join(t2,NULL);
  pthread_join(t3,NULL);

  return 0;
}

打印如:

howdy
      wrold
howdy
      wrold

1 个答案:

答案 0 :(得分:3)

它未定义的行为,任何事情都可能发生。

例如,在我的机器上,它根本不打印任何东西。

  • i未初始化。
  • void* run必须返回一些内容(例如:return NULL;