【问题标题】:pthread_join Segmentation faultpthread_join 分段错误
【发布时间】:2015-05-02 07:10:50
【问题描述】:

我正在尝试将 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" ;}

【问题讨论】:

  • 您是否遇到任何具体错误?能贴一下具体代码吗?让其他人更容易关注。
  • 这远不是一个最小的样本,这是一个有效问题的要求。减少你的代码,直到它重现你所询问的行为。
  • 我收到“分段错误(核心转储)”错误。当我添加“s = pthread_join(aa[i],NULL);”时发生错误行^^
  • @makripx “当我添加“s = pthread_join(aa[i],NULL);”时会发生错误你不能只显示这个上下文,没有所有其他不相关的代码??
  • 我很抱歉。这是我的第一篇文章。我编辑了我的问题,下次我会尽量说得更清楚。

标签: c++ c multithreading pthread-join


【解决方案1】:

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()的东西。

【讨论】:

  • 感谢它的工作。这是我第一次使用线程,请原谅我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
  • 2018-11-06
  • 2017-12-27
  • 2017-04-18
相关资源
最近更新 更多