Hi, all:
I'm reading the runtime code, and there are some questions, as shown below:
func globrunqput(gp *g) {
gp.schedlink = 0
if sched.runqtail != 0 {
sched.runqtail.ptr().schedlink.set(gp) // My question: why?
// I feel should be gp.schedlink.set(sched.runqtail.ptr()) .
// So, the chain is: sched.runqtail => old sched.runqtail.
// I don't know if it's right (like sched.midle, single linked list).
} else {
sched.runqhead.set(gp) // My question: why?
// Set here the head, and then set the tail.
}
sched.runqtail.set(gp)
sched.runqsize++
}
func globrunqputhead(gp *g) {
gp.schedlink = sched.runqhead
sched.runqhead.set(gp)
if sched.runqtail == 0 {
sched.runqtail.set(gp) // My question: why?
// Set the head, and then set the tail in here.
}
sched.runqsize++
}
Who can answer my question? I'm overwhelmed with gratitude.
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.