您的位置:首页 > 其它

pthread_create 传递参数时指针跑飞问题

2013-12-27 09:50 197 查看
http://blog.sina.com.cn/s/blog_7e25c3ad0101nxn3.html

今天在使用pthread_create的时候遇到了一个问题,传递的arg指针跑飞了,使用如下:

PthreadArgs arg;
if (pthread_create(&pid, NULL, ThreadFunc, reinterpret_cast (&arg)) != 0)

在ThreadFunc函数里:
PthreadArgs *tmp_arg = reinterpret_cast (args);
但是arg 和 tmp_arg里的内容确不相同,指针跑飞了。

问题困扰了很久,才知道原因,PthreadArgs arg,是在原有的线程里面的栈上分配的变量,在新的线程里面在访问其它线程的栈空间是有问题的。
解决方法是,new一个PthreadArgs *arg,在堆上分配空间,然后在ThreadFunc里面消除
注意一定要在线程函数ThreadFunc里面删除,如果在外面的线程删除的话,是没办法判断里面的线程是否已经用完了该数据的

具体如下:
PthreadArgs *arg = new PthreadArgs();

pthread_create(&pid, NULL, ThreadFunc, reinterpret_cast (arg);

在ThreadFunc里面:
PthreadArgs *tmp_arg = reinterpret_cast (args);
用完之后delete:delete tmp_arg;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: