读书人

请问一个关于pthread_create()传递最后

发布时间: 2013-03-21 10:08:17 作者: rapoo

请教一个关于pthread_create()传递最后一个参数的问题。
struct fun_argu;
while(循环6次){
... \\这里修改fun_argu的内容
pthread_create(id, attr, funname, &fun_argu);
}

这个情况中,函数调用,最后一个fun_argu是一个结构体,创建好后传给pthread_create,但是pthread_create最后一个参数传递的必须是个指针,所以我传了&fun_argu。

那问题就出现了,由于循环太快了,线程里面还没来得及用fun_argu,fun_argu就已经变了6次,导致最后6个线程使用的fun_argu都是一样的。

本来建fun_argu结构体,就是因为不能用全局变量,但是假如传入的是指针的话,那就和用全局变量差不多了。

一般用什么办法可以实现每次传进去的后线程使用的参数不一样? 线程
[解决办法]
给线程传参 还是传堆上的空间 安全些。
[解决办法]
复制一份堆内存。
[解决办法]
六个线程,当然要对不同的数据进行处理,搞个数组不就行了;
还有注意,线程没有结束是不要退出这个函数哦,否则局部变量就fun_argu[6]就释放了。

struct foo fun_argu[6];

for (i = 0; i < 6; ++i)
{
pthread_create(id, attr, funname, &fun_argu[i]);
}

pthread_join

读书人网 >C语言

热点推荐