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