簡體   English   中英

pthread_join分段錯誤

[英]pthread_join Segmentation fault

我正在嘗試將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()的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM