c++ 调用方法的问题

天王盖地虎626 发布于 05/19 12:17
阅读 110
收藏 0

请教一个问题,比如,有一个类Student,然后实例化2个对象A和B,然后这2个对象同时调用其方法queryResult。

从内存角度看,虽然A和B对象都有自己的内存空间,但是,他们queryResult只有一份内存拷贝,供Student类的所有对象实例共享,我想问,A和B对象同时调用方法queryResult,这会不会阻塞问题?

就好比现实中的2个同学,相当于对象A和B,现在只有一台电脑可以在线查询成绩,这电脑就相当于queryResult方法。我想,2个同学同时查询成绩,肯定最终只能进行排队,要不,谁都查不到成绩。

那A和B同时调用queryResult方法,是不是也是如此,看似同时,但是,系统会最终给他们排队,让其轮流查询?

加载中
0
Celetium
Celetium
类的方法只是个指针,都指向一个地方的,是否阻塞看这个方法的实现,你不加互斥就不会阻塞,当然拿到的数不见得稳定,看这时候有没有人改!
0
风青山
风青山
编程方面,时间是一个基本维度,而且无法忽视、抽象掉,正因如此,出现了排队现象。
0
开源中国首席C菜鸟
开源中国首席C菜鸟
内心里面确实只有一份queryResult的拷贝,调用方法的时候是处理器直接同时(多核)执行的这份拷贝,如果单核的话是列队执行的,只不过速度太快看上去好像同时。至于方法里面的数据原子性问题,需要根据你的情况而定
0
前端大师傅
前端大师傅

楼主说错了,虽然a和b的实例及其方法的leap地址相同,但有一点要说明的是,楼主没弄清楚,就算是在同一台电脑里面也是开两个process来完成A同学和B同学的要求。那麽在不同的进程下创建的内存区域是完全独立的不可能出现所谓的内存共享的问题。这已经和内存无关而是在业务设计中没有哪一个桌面cs系统是容许同时两个用户登录到同一个系统。在bs系统里,每个请求request都是在一个独立的线程里,除了静态内存(代码区)其它都是不共享的。

所以楼主所说的这种情况根本就不存在,建议楼主还是把最基础的知识再好好学习一下。

0
天王盖地虎626
天王盖地虎626

引用来自“前端大师傅”的评论

楼主说错了,虽然a和b的实例及其方法的leap地址相同,但有一点要说明的是,楼主没弄清楚,就算是在同一台电脑里面也是开两个process来完成A同学和B同学的要求。那麽在不同的进程下创建的内存区域是完全独立的不可能出现所谓的内存共享的问题。这已经和内存无关而是在业务设计中没有哪一个桌面cs系统是容许同时两个用户登录到同一个系统。在bs系统里,每个请求request都是在一个独立的线程里,除了静态内存(代码区)其它都是不共享的。

所以楼主所说的这种情况根本就不存在,建议楼主还是把最基础的知识再好好学习一下。

如果,不同的进程,肯定没有问题,但是,我想,如果,这台电脑是多核,在一个进程中,有多个对象,同时调用同一个方法,应该是存在的吧

前端大师傅
前端大师傅
楼主想多了,硬件的内核是和软件实现无关的。即软件不可能去直接控制内核,这样操作是被IR禁止的。一般framework平台都会托管代码,也就是程序员只专注于线程间操作,而不需要在意内核的利用,程序是与内核无关,即硬件无关性。我们的程序是不需要为4核或8核或xxGhz而写不同的代码,否则这样就非常麻烦。所以不需要像楼主所想的注意多内核的情况,否则那还要考虑单核的情况那不是很累。
返回顶部
顶部