读书人

多线程的跳转是否汇编级的

发布时间: 2012-09-27 11:11:17 作者: rapoo

多线程的跳转,是不是汇编级的?
可能我说的比较抽象。

我的问题是这样。

比如有两个线程
线程1的函数正在进行如下操作
int b=1;——语句1
A* a=new A;——语句2
int c=1;——语句3
而线程二在抢夺的时候,会在语句1和语句2之间跳转,也会在语句2和语句3之间跳转——我这种说法,没错吧?

那么,会不会在语句2进行了一半的时候,跳到了线程二中?

比如,刚分配了内存,刚调用构造函数,但是还没有把内存地址付给a的时候,就跳到线程二了?——我觉得有这种可能,不知道我的感觉是否正确?

所以,我在想,真正的线程跳转,是汇编级的一条语句?而不是高级语言级的一条语句?
我的意思是,从上一条汇编语句跳到下一条汇编语句。

恳请高人解答,分不够我再加


[解决办法]
用合适的同步高级语言也能用。
[解决办法]
线程跳转是机器级的,cpu哪认识高级语言,new里面要分配内存,要调用构造函数,换成高级语言都不止一步,何况汇编
[解决办法]
说的问题我不是很清楚,线程跳转是指的什么。
你声明的a和b和c变量都是临时的变量,好像不存在什么跳转吧。
[解决办法]

探讨

引用:
线程跳转是机器级的,cpu哪认识高级语言,new里面要分配内存,要调用构造函数,换成高级语言都不止一步,何况汇编


不是吧?你的意思是,汇编上下两条语句之间,也可能存在跳转?

[解决办法]
跳转的依据是CPU分配的时间片,但是汇编1条指令占用多个时间片的很多。
[解决办法]
在两条汇编指令之间切换线程
[解决办法]
汇编不是根本,LZ研究一下OS的理论吧。
[解决办法]
线程切换不是跳转.
线程的切换是由中断引发的。
[解决办法]
线程切换要么是被动中断,要么是主动调用到阻塞的系统函数。主动的就不说了,被动的话随时可能被中断,不只是两条汇编指令之间,单条汇编指令例如REP打头的在执行过程中也可能被中断。
[解决办法]
那么,会不会在语句2进行了一半的时候,跳到了线程二中?
--------------------
当然可能
[解决办法]
《30天自制操作系统》
[解决办法]
探讨

引用:
那么,会不会在语句2进行了一半的时候,跳到了线程二中?
--------------------
当然可能

我知道有这种可能了……
我的问题是,对于线程切换,汇编指令属于原子级的

[解决办法]
原子级又怎样呢

时钟中断->进入调度器->发现你那个线程A没有时间片啦

保存线程A 用的所有寄存器 包括执行到哪条汇编语句

调度器找一个优先级高的线程开始执行 ……又执行别的线程… 再执行其他线程……

终于有一天线程A 又获得时间片啦 恢复寄存器 从刚才的汇编语句继续执行

如何
[解决办法]
线程跳转是原子级的。
[解决办法]
不知道呢,既然中断时汇编的,那么多线程也应该是汇编的,毕竟现代程序多线程用的很多
[解决办法]
只有明确说明有原子性的那些东西才是原子操作。
[解决办法]
探讨

还有回复吗?

[解决办法]
原子操作 涉及到操作系统啊

读书人网 >C++

热点推荐