teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

追加説明

2018/01/23 00:41

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -26,10 +26,14 @@
26
26
  }
27
27
 
28
28
  switch {
29
- case <-sig:
29
+ case result <-sig:
30
+ if result == true{
30
- pp.Print("True")
31
+ pp.Print("True")
32
+ } else {
33
+ pp.Print("False")
34
+ }
31
35
  default:
32
- pp.Print("False")
36
+
33
37
  }
34
38
 
35
39
  wg.Wait()

3

追加説明

2018/01/23 00:41

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -18,8 +18,9 @@
18
18
  pp.Println(i)
19
19
  if i == 3 {
20
20
  sig <- true
21
+ } else {
22
+ sig <- false
21
- }
23
+ }
22
- sig <- false
23
24
  wg.Done()
24
25
  }(i)
25
26
  }
@@ -85,4 +86,48 @@
85
86
  - なぜそうなるのか
86
87
 
87
88
  をご指導していただきたいです。
88
- よろしくお願いたします
89
+ よろしくお願いたします
90
+
91
+ ## 追加
92
+
93
+ 以下のコードではすべてが出力されたあとに`deadlock`のエラーが出ます。
94
+
95
+ ```
96
+ package main
97
+
98
+ import (
99
+ "sync"
100
+
101
+ "github.com/k0kubun/pp"
102
+ )
103
+
104
+ func main() {
105
+ wg := sync.WaitGroup{}
106
+ sig := make(chan bool)
107
+ for i := 0; i < 10; i++ {
108
+ wg.Add(1)
109
+ go func(i int) {
110
+ pp.Println(i)
111
+ if i == 3 {
112
+ sig <- true
113
+ } else {
114
+ sig <- false
115
+ }
116
+ wg.Done()
117
+ }(i)
118
+ }
119
+
120
+      for {
121
+ switch {
122
+ case <-sig:
123
+ pp.Print("True")
124
+ default:
125
+ pp.Print("False")
126
+ }
127
+ }
128
+
129
+ wg.Wait()
130
+ close(sig)
131
+ pp.Print("All Done")
132
+ }
133
+ ```

2

追加説明

2018/01/23 00:39

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -50,6 +50,7 @@
50
50
  6
51
51
  4
52
52
  7
53
+ fatal error: all goroutines are asleep - deadlock!
53
54
  ```
54
55
 
55
56
  しかし、以下のケースではうまくいきます。

1

追加説明

2018/01/22 14:03

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -37,6 +37,21 @@
37
37
  }
38
38
  ```
39
39
 
40
+ 出力は以下の通りです。
41
+
42
+ ```
43
+ 9
44
+ 1
45
+ 5
46
+ 0
47
+ 2
48
+ 3
49
+ "False"8
50
+ 6
51
+ 4
52
+ 7
53
+ ```
54
+
40
55
  しかし、以下のケースではうまくいきます。
41
56
 
42
57