pthread与struct参数不起作用

时间:2014-03-11 05:19:47

标签: c++ pthreads

  • 我已经阅读了一些帖子,看来它仍然无法解决我正在使用的这个简单的pthread问题。关于我做错了什么的任何建议?我随机地不断收集垃圾而不是0到5的数字。

    #define num_threads 6
    
    pthread_mutex_t mutex;
    pthread_t threads[num_threads];
    
    struct argument
    {
     int value;
    };
    
    void* fun(void* args)
    {pthread_mutex_lock(&mutex);
     argument* args2=(argument*)args;
     cout<<args2->value<<endl;
     pthread_mutex_unlock(&mutex);
    }
    
    int main()
    {pthread_mutex_init(&mutex,NULL);
     for (long i=0;i<num_threads;i++)
        {argument* args=new argument;
         args->value=i;
         pthread_create(&(threads[i]),NULL,fun,(void*) args);
        delete args;
        }
    
     for (long i=0;i<num_threads;i++)
       {pthread_join(threads[i],NULL);}
     pthread_exit(NULL);
    }
    

1 个答案:

答案 0 :(得分:0)

您没有正确处理内存;

// Allocate memory for argument
argument* args=new argument; 

// Set value
args->value=i;

// Create a thread, passing a pointer to argument as a parameter
pthread_create(&(threads[i]),NULL,fun,(void*) args);

// Free the argument you just passed.
// The pointer you just passed is no longer pointing to valid memory
// when the thread actually starts.
delete args;

在这种情况下,像你一样分配/传递参数,但删除主线程中的delete并允许线程在完成使用后删除自己的参数 可能是最简单的选择。