请教一个关于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结构体,就是因为不能用全局变量,但是假如传入的是指针的话,那就和用全局变量差不多了。
一般用什么办法可以实现每次传进去的后线程使用的参数不一样?
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结构体,就是因为不能用全局变量,但是假如传入的是指针的话,那就和用全局变量差不多了。
一般用什么办法可以实现每次传进去的后线程使用的参数不一样?
...全文
相关推荐
C语言编程中借助pthreads库进行多线程编程的示例
主要介绍了C语言编程中借助pthreads库进行多线程编程的示例,文中的示例环境为Windows系统,需要的朋友可以参考下
多线程编程UNIXLinux下的多线程编程.pdf
多线程编程UNIXLinux下的多线程编程.pdf
linux创建线程之pthread_create的具体使用
pthread_create函数 函数简介 pthread_create是UNIX环境创建线程函数 头文件 #include 函数声明 int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg); 返回值 若成功则返回0,否则返回出错编号 参数 第一个参数为指向线程标识符的指针。 第二个参数用来设置线程属性。 第三个参数是线程运行函数的地址。 最后一个参
pthread_create传递参数(线程函数传递参数示例)
向线程函数传递参数的程序示例; 一个资源包,执行 tar zxvf example.tar.gz 解压资源; 复制readme.txt中的编译语句,编译得到可执行程序threadtest; ./threadtest 执行皆可看到效果。
由浅入深Linux下pthread线程库介绍
由浅入深Linux下pthread线程库介绍,pthread在linux下面的实现,与posix的标准


