免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11956 | 回复: 16

linux线程是否共享进程所有空间 [复制链接]

论坛徽章:
0
发表于 2008-07-15 22:20 |显示全部楼层
unix环境高级编程第11章中说“进程的所有信息对该进程所有的线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈、以及文件描述符”

栈中不是保存局部变量吗?局部变量其他的线程也能访问吗?我记得做过实验是不能访问的。
#include <stdio.h>
#include <pthread.h>
void* thread(void)
{
    int i,sum=0;
    for(i=1;i<=10;i++)
    {
        sum=sum+i;
        sleep(1);
    }
    printf("The sum is %d\n",sum);
}
int main(void)
{
    pthread_t id;
    int i,ret;
    char buf[80];
    ret=pthread_create(&id,NULL,thread,NULL);
    if(ret!=0)
    {
        printf ("Create pthread error!\n");
        exit (1);
    }
    while(1)
    {
        printf("please input a string\n");
        scanf("%s",buf);
        printf("This string is %s\n",buf);
    }
    pthread_join(id,NULL);
    return (0);
}

线程应该不能访问main局部变量吧?
怎么解释呢?

论坛徽章:
0
发表于 2011-03-30 15:05 |显示全部楼层

论坛徽章:
0
发表于 2011-03-29 22:30 |显示全部楼层
你贴的代码想要得到什么结果呢? 你试试把main里的局部变量指针传给线程看看?

论坛徽章:
0
发表于 2011-03-29 21:09 |显示全部楼层
本帖最后由 oppstone 于 2011-03-29 21:11 编辑

向大侠们学习了~~~

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2008-07-28 20:19 |显示全部楼层
原帖由 wkathy 于 2008-7-28 16:04 发表

“是否共享和能不能访问没有什么关系”不太明白,共享的目的不是为了读或写吗?

我的理解,“共享”指的是共用一份拷贝,也既是大家共同所有,不是某个线程单独拥有。

我还是没懂到底线程栈里的数据其他线程是否能访问,

用户态的地址空间各个线程都是可以互相访问的(AFAIK)。

论坛徽章:
0
发表于 2008-07-28 16:04 |显示全部楼层
“各线程共享进程地址空间”的意思是不是就是“线程共享进程的所有信息,包括可执行的程序文本、程序的全局内存和堆内存、栈、以及文件描述符”?那是不是可以理解成只要知道了具体的地址,线程可以访问进程地址空间中的任一信息。

“是否共享和能不能访问没有什么关系”不太明白,共享的目的不是为了读或写吗?

我还是没懂到底线程栈里的数据其他线程是否能访问,是不是进程空间中的信息是否每个线程都是无条件可访问的,原因又是什么呢?

论坛徽章:
0
发表于 2008-07-23 16:34 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2008-07-19 14:29 |显示全部楼层
原帖由 scutan 于 2008-7-18 23:15 发表


呵呵,我一般只对尊敬的人说“您”。因为我刚来CU时从你那儿学到了很多的东西,所以比较尊敬你!

哈哈,直接称“你”就好了。

论坛徽章:
0
发表于 2008-07-18 23:15 |显示全部楼层
原帖由 MMMIX 于 2008-7-18 23:09 发表

你就别用“您”了,我听者老别扭了。当然,如果你是故意的那另说


呵呵,我一般只对尊敬的人说“您”。因为我刚来CU时从你那儿学到了很多的东西,所以比较尊敬你!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2008-07-18 23:09 |显示全部楼层
原帖由 scutan 于 2008-7-18 22:24 发表


呵呵, 我误解了您之前的意思, 您的意思是说栈共享, 而我的意思是说线程共享地址空间, 是我开始没有理解正确. 确实, 它们不能够共享栈, 只是共享地址空间.

你就别用“您”了,我听者老别扭了。当然,如果你是故意的那另说
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP