Golang源码学习:调度逻辑(一)初始化 (3)

acquirep(p)->wirep(_p_) :acquirep中的主要逻辑就是调用了wirep

func wirep(_p_ *p) { _g_ := getg() if _g_.m.p != 0 || _g_.m.mcache != nil { throw("wirep: already in go") } if _p_.m != 0 || _p_.status != _Pidle { id := int64(0) if _p_.m != 0 { id = _p_.m.ptr().id } print("wirep: p->m=", _p_.m, "(", id, ") p->status=", _p_.status, "\n") throw("wirep: invalid p state") } _g_.m.mcache = _p_.mcache // p的mcache赋值给m.mcache _g_.m.p.set(_p_) // 与下面的一行为 p和m相互绑定 _p_.m.set(_g_.m) _p_.status = _Prunning // 更改p的状态 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwswf.html