pthread_join分段错误

pthread_join Segmentation fault

本文关键字:错误 分段 join pthread      更新时间:2023-10-16

我正试图将pthread_join与这个生产者-消费者程序一起使用,但我一直遇到分段错误。我的目的是等待所有生产者线程结束,然后终止所有消费者。但在第一个线程加入后,我出现了分段错误。我在网上搜索了一下,但没有找到任何有用的东西。有什么想法吗?

using namespace std ;
int main()
{
  pthread_mutex_init(&mutex , NULL);
 sem_init(&full , 0 ,0);
 sem_init(&empty , 0 , BUFFER_SIZE);
  pthread_t ProducerThread , ConsumerThread;
 int *aa = new int [4];
 for(int i = 0 ; i < 4 ; i++)
 {
  aa[i] = i;
  pthread_t t;
  int k= pthread_create(&t , NULL, Produce , &aa[i]);
  if(k!=0)
  cout<<"Errot"<<endl;
  else  
  printf("Creating Producer %d n", i);
 }
 int *bb = new int[2];
 for(int i = 0 ; i < 2 ; i++)
 {
  bb[i] = i;
  pthread_t t;
  pthread_create(&t , NULL, Consume , &bb[i]);
  printf("Creating Consumer %d n", i);
 }
int s;
  for (int i=0;i<4;i++){
  s = pthread_join(aa[i],NULL);
               if (s != 0)
                   cout<< "pthread_join error" ;}
pthread_join()的参数是存储在pthread_create()第一个参数中的值。
pthread_t t;
int k= pthread_create(&t , NULL, Produce , &aa[i]);

线程句柄是pthread_t t句柄。你用它做了什么?您将其丢弃,并将aa[i]参数传递给pthread_join()。

这不是线程句柄。

您需要保存pthread_t句柄,是传递给pthread_join()的句柄。