【发布时间】:2021-12-03 06:53:51
【问题描述】:
所以我的问题是如何将消息发送到broadcast 函数仅在通道未关闭且仅一次时才获得的通道。
发送消息后应增加sentNumber。
我说只是提醒一下,向所有频道发送消息是有时间限制的!
package main
import (
"fmt"
"sync"
"time"
)
var (
sentNumber int
)
func broadcast(waitTime time.Duration, message string, ch ...chan string) (sentNumber int) {
start := time.Now()
for _, channel := range ch {
if time.Since(start) >= waitTime {
break
}
go send(channel, message)
}
return 0
}
func send(channel chan string, message string) {
for {
if _,open := <-channel; open{
break
}
}
var wg sync.WaitGroup
wg.Add(1)
go func() {
wg.Done()
channel <- message
}()
wg.Wait()
}
func main() {
a := make(chan string, 1)
b := make(chan string, 1)
broadcast(5, "secret message", a, b)
fmt.Println(<-a)
fmt.Println(<-b)
}
【问题讨论】:
标签: go concurrency