[英]Why are not outputs the same after re-executing my multithreading code?
When I execute the following code, after every re-compile and re-execute, the answers(outputs) are not the same. 当我执行以下代码时,在每次重新编译并重新执行后,答案(输出)都不相同。 What is a reason for it?
是什么原因呢?
#include <iostream>
#include <cstdlib>
//#include <pthread.h>
using namespace std;
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
cout << "Hello World! Thread ID, " << tid << endl;
pthread_exit(NULL);
}
int main ()
{
pthread_t threads[NUM_THREADS];
int rc;
int i;
for( i=0; i < NUM_THREADS; i++ ){
cout << "main() : creating thread, " << i << endl;
rc = pthread_create(&threads[i], NULL,
PrintHello, (void *)i);
if (rc){
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}
}
pthread_exit(NULL);
}
g++ test.cpp -o test -lpthread ./test g ++ test.cpp -o test -lpthread ./test
Output1: 输出1:
main() : creating thread, 0
main() : creating thread, 1
main() : creating thread, 2
Hello World! Thread ID, 0
main() : creating thread, 3
Hello World! Thread ID, 1
Hello World! Thread ID, 2
main() : creating thread, 4
Hello World! Thread ID, 3
Hello World! Thread ID, 4
g++ test.cpp -o test -lpthread ./test g ++ test.cpp -o test -lpthread ./test
Output2: 输出2:
main() : creating thread, 0
main() : creating thread, 1
main() : creating thread, 2
main() : creating thread, 3
Hello World! Thread ID, 0
main() : creating thread, 4
Hello World! Thread ID, 3
Hello World! Thread ID, 2
Hello World! Thread ID, 4
Hello World! Thread ID, 1
由于线程未同步,因此执行顺序无法精确确定,并且取决于您的执行上下文,例如,同时正在运行其他哪些进程等,每次运行程序时可能会有所不同。
yes. 是。 I have used of
我已经习惯了
pthread_mutex_lock(&mutex); pthread_mutex_lock(&mutex); and pthread_mutex_unlock(&mutex);
和pthread_mutex_unlock(&mutex); as follows
如下
#include <iostream>
#include <cstdlib>
#include <pthread.h>
#include <unistd.h>
using namespace std;
#define NUM_THREADS 5
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
//sleep(1);
cout << "Hello World! Thread ID, " << tid << endl;
pthread_mutex_unlock(&mutex);
pthread_exit(NULL);
}
int main ()
{
pthread_t threads[NUM_THREADS];
int rc;
int i;
//pthread_attr_t attr;
//pthread_attr_init(&attr);
//pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
for( i=0; i < NUM_THREADS; i++ ){
pthread_mutex_lock(&mutex);
cout << "main() : creating thread, " << i << endl;
rc = pthread_create(&threads[i], NULL, PrintHello, (void *)i);
//sleep(0.5);
if (rc){
cout << "Error:unable to create thread," << rc << endl;
exit(-1);
}
}
pthread_exit(NULL);
}
and my outputs is always: 而我的输出始终是:
main() : creating thread, 0
Hello World! Thread ID, 0
main() : creating thread, 1
Hello World! Thread ID, 1
main() : creating thread, 2
Hello World! Thread ID, 2
main() : creating thread, 3
Hello World! Thread ID, 3
main() : creating thread, 4
Hello World! Thread ID, 4
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.