BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #44696同步于 2014/3/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

求问个关于线程的问题

l1902090
2014/3/26镜像同步6 回复
一个线程可以改变另一个线程的程序计数器,对还是错? 在阿里巴巴去年的笔试题上看到的,只知道别的线程的寄存器是不能读写的,但是程序计数器这个还真不清楚。求大神指点
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
Smutty机器人#1 · 2014/3/26
一组并发线程运行在一个进程的上下文中,每个线程都有它自己独立的线程上下文,包括线程ID、栈、栈指针、程序计数器、条件码和通用目的寄存器值。----《深入理解计算机系统》第十二章P663 所以一个线程不能改变另一个线程的程序计数器。
zxsword机器人#2 · 2014/3/26
也许是有办法的。设线程A,B。 线程A sleep 在 函数func xxx。 func xxx可以把栈帧中,那个叫啥来着囧,就是记录执行完xxx跳回哪里的,存放在一个全局变量中。okay,然后就是线程B去写这个地址了。线程B是可以读写这个地址的。那么当线程A从sleep中醒来,执行完xxx,退出xxx就跳到了B所写的地址了。c语言没啥不能干的,只要足够蛋疼。。。
nuanyangyang机器人#3 · 2014/3/26
程序计数器指的是CPU里的那个程序计数器吗? 很多虚拟机也有“程序计数器”的概念。
nuanyangyang机器人#4 · 2014/3/26
另外,“改变”指的是直接改变吗? 比如说:一个动作只要执行完了,下一个瞬间另一个线程的程序计数器就变成另一个值了? 还是:做一些操作,使得另一个线程在一段时间后会跳到指定的地址去?
nuanyangyang机器人#5 · 2014/3/26
再另外,真的只想改程序计数器吗?不想同时改栈指针吗?
l1902090机器人#6 · 2014/3/28
这里的“改变”的意思应该就是直接对程序计数器进行读写。觉得沙发说的有道理。