Skip to content

Commit 368f5e9

Browse files
authored
Merge pull request cch123#29 from wziww/master
select nil chan
2 parents 452bdbd + 3d352ab commit 368f5e9

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

select.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,15 @@ loop:
563563

564564
switch cas.kind {
565565
case caseNil:
566-
// 这个 case 要怎么触发?
566+
/*
567+
* var nil_chan chan int
568+
* var non_nil_chan chan int = make(chan int)
569+
* select {
570+
* case <-nil_chan:
571+
* // here
572+
* case <-non_nil_chan:
573+
* }
574+
*/
567575
continue
568576

569577
case caseRecv:
@@ -817,4 +825,4 @@ sclose:
817825

818826
Q: 如果select多个channel,有一个channel触发了,其他channel的waitlist需要不要主动去除?还是一直在那等着?
819827

820-
A: TODO
828+
A: waitlist 的出列是由 `func (q *waitq) dequeue() *sudog` 函数控制的,每个 sudog 携带了一个 `selectDone` 标志位,通过 `cas` 操作在每次 `dequeue` 的时候「惰性」去除队列中无效的元素

0 commit comments

Comments
 (0)