这是上面改写的通道,建议使用@mkb(排除无限队列大小)。
它不会锁定。
我建议您使用渠道,除非您有充分的理由不这样做,因为Go团队已花费大量精力使其变得可靠,高性能且易于使用。
package mainimport ( "fmt" "runtime" "sync" "time")const ( MAX_DATA_SIZE = 100)func main() { runtime.GOMAXPROCS(4) var wg sync.WaitGroup wg.Add(20) queue := make(chan time.Time, 10) for i := 0; i < 10; i++ { go func() { defer wg.Done() for j := 0; j < MAX_DATA_SIZE; j++ { t := time.Now() queue <- t fmt.Println("enq = ", t) } }() } for i := 0; i < 10; i++ { go func() { defer wg.Done() for j := 0; j < MAX_DATA_SIZE; j++ { val := <-queue fmt.Println("deq = ", val) } }() } wg.Wait()}


