我开始使用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
答案 0 :(得分:3)
它未定义的行为,任何事情都可能发生。
例如,在我的机器上,它根本不打印任何东西。
i
未初始化。void* run
必须返回一些内容(例如:return NULL;
)