We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
2 parents 452bdbd + 3d352ab commit 368f5e9Copy full SHA for 368f5e9
select.md
@@ -563,7 +563,15 @@ loop:
563
564
switch cas.kind {
565
case caseNil:
566
- // 这个 case 要怎么触发?
+ /*
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
+ */
575
continue
576
577
case caseRecv:
@@ -817,4 +825,4 @@ sclose:
817
825
818
826
Q: 如果select多个channel,有一个channel触发了,其他channel的waitlist需要不要主动去除?还是一直在那等着?
819
827
820
-A: TODO
828
+A: waitlist 的出列是由 `func (q *waitq) dequeue() *sudog` 函数控制的,每个 sudog 携带了一个 `selectDone` 标志位,通过 `cas` 操作在每次 `dequeue` 的时候「惰性」去除队列中无效的元素
0 commit comments