1
2
3
4
5 package main
6
7
8
9
10
18 import "C"
19
20 import (
21 "runtime"
22 "sync"
23 )
24
25 func main() {
26 var wg sync.WaitGroup
27 var mu sync.Mutex
28 c := make(chan []C.char, 100)
29 for i := 0; i < 10; i++ {
30 wg.Add(2)
31 go func() {
32 defer wg.Done()
33 for i := 0; i < 100; i++ {
34 c <- make([]C.char, 4096)
35 runtime.Gosched()
36 }
37 }()
38 go func() {
39 defer wg.Done()
40 for i := 0; i < 100; i++ {
41 p := &(<-c)[0]
42 mu.Lock()
43 C.f(p)
44 mu.Unlock()
45 }
46 }()
47 }
48 wg.Wait()
49 }
50
View as plain text