为什么重新执行我的多线程代码后输出不一样

Why are not outputs the same after re-executing my multithreading code?

本文关键字:代码 多线程 输出 不一样 我的 新执行 执行 为什么      更新时间:2023-10-16

当我执行以下代码时,每次重新编译并重新执行后,答案(输出)都不一样。这是什么原因呢?

 #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。/测试

输出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。/测试

输出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

由于您的线程未同步,因此执行顺序无法精确确定,并且取决于您的执行上下文,例如同时运行哪些其他进程等,每次运行程序时可能会有所不同。

是的。我用过
pthread_mutex_lock(和互斥);和pthread_mutex_unlock(和互斥体);如下

#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);
}

我的输出始终是:

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