我已经阅读了一些帖子,看来它仍然无法解决我正在使用的这个简单的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);
}
答案 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
并允许线程在完成使用后删除自己的参数 可能是最简单的选择。