C++ pthread_连接分段错误

C++ pthread_连接分段错误,c++,c,multithreading,pthread-join,C++,C,Multithreading,Pthread Join,我试图使用pthread_连接这个生产者-消费者程序,但我一直遇到一个segmentantion错误。我的目的是等待所有生产者线程结束,然后终止所有消费者。但是在第一个线程连接之后,我得到了一个分段错误。我在网上搜索了一下,但没有找到任何有用的东西。有什么想法吗 using namespace std ; int main() { pthread_mutex_init(&mutex , NULL); sem_init(&full , 0 ,0); sem_init(&am

我试图使用pthread_连接这个生产者-消费者程序,但我一直遇到一个segmentantion错误。我的目的是等待所有生产者线程结束,然后终止所有消费者。但是在第一个线程连接之后,我得到了一个分段错误。我在网上搜索了一下,但没有找到任何有用的东西。有什么想法吗

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" ;}
使用名称空间std;
int main()
{
pthread_mutex_init(&mutex,NULL);
sem_init(&full,0,0);
sem_init(&empty,0,缓冲区大小);
pthread_t ProducerThread,ConsumerThread;
int*aa=新int[4];
对于(int i=0;i<4;i++)
{
aa[i]=i;
pthread_t;
int k=pthread_create(&t,NULL,product,&aa[i]);
如果(k!=0)

coutpthread_join()的参数是存储在pthread_create()的第一个参数中的值

pthread_t t;
int k= pthread_create(&t , NULL, Produce , &aa[i]);
线程句柄是
pthread\u t
句柄。你用它做了什么?你把它扔掉了,你正在将
aa[i]
参数传递给pthread\u join()

这不是线程句柄


您需要保存
pthread\u t
句柄,这就是传递给pthread\u join()的内容。

pthread\u join()的参数是存储在pthread\u create()的第一个参数中的值

pthread_t t;
int k= pthread_create(&t , NULL, Produce , &aa[i]);
线程句柄是
pthread\u t
句柄。你用它做了什么?你把它扔掉了,你正在将
aa[i]
参数传递给pthread\u join()

这不是线程句柄


您需要保存
pthread\u t
句柄,这就是传递给pthread\u join()的内容.

您是否有任何特定错误?您是否可以粘贴特定代码?这会让其他人更容易理解。这远远不是一个最低限度的示例,因为这里需要一个有效的问题。减少您的代码,直到它只是复制您所问的行为。我得到了“分段错误(核心转储)”错误。当我添加“s=pthread_连接(aa[I],NULL)”时出错;当我添加“s=pthread_连接(aa[I],NULL)”时出错;"你不能只在一个最小的上下文中展示这一点,没有所有其他不相关的代码??我道歉。这是我的第一篇文章。我编辑了我的问题,下次我会尽量更直截了当。你有什么具体的错误吗?你能粘贴具体的代码吗?让其他人更容易理解。这远不是一个最小的示例,就像这里是一个有效问题所必需的。减少代码,直到它只是复制您所询问的行为。我得到了“分段错误(内核转储)”错误。错误发生在我添加“s=pthread_连接(aa[I],NULL);“line^@makripx”错误发生在我添加“s=pthread_连接(aa[I],NULL)”时;"如果没有其他无关的代码,你不能只在最小的上下文中展示这一点??我很抱歉。这是我的第一篇文章。我编辑了我的问题,下次我会尝试更切题。谢谢它奏效了。这是我第一次使用线程,所以请原谅我!谢谢它奏效了。这是我第一次使用线程,所以放纵我吧!