最近发布的主题
最近发布的文章
暂无
最近分享的资源
暂无
最近发布的项目
暂无
最近的评论
-
评论了主题 请问这个泛型如何使用,字符串拼接str.WriteString(fmt.Sprintf("%v", v))
-
评论了主题 请教个context应用场景的问题
-
评论了主题 请教个context应用场景的问题
-
评论了主题 请教关闭TCP监听时的争用问题@buscoop 最终方案就是1楼的办法。 另外,我最初的这个方案,似乎也不会报race问题,这是令我困惑的。 ``` func NewSrv() { ln, err := net.ListenTCP() defer ln.Close() ... go func() { <- exitChann ln.Close() } for { c, err:= ln.Accept() .... } } ```
-
评论了主题 请教关闭TCP监听时的争用问题@xwszt</a> , 最初是用channel来通知关闭的。外部goroutine close掉这个channel来通知。但这样需要在创建listener的协程中另起一个协程来监听这个channel。多个listener就起了多个监听的协程,感觉浪费。 大致代码如下: ``` func NewSrv() { ln, err := net.ListenTCP() defer ln.Close() ... go func() { <- exitChann ln.Close() } for { c, err:= ln.Accept() .... } } ``` 现在改成了1楼的建议: ``` func NewSrv() { ln, err := net.ListenTCP() defer ln.Close() ... for { select { case <- exitChann: return default: ln.SetDeadlin() c, err := ln.Accept() .... } } } ```" name="content" class="comment-textarea" rows="8" style="width: 100%;"><a href="/user/xwszt" title="@xwszt">@xwszt</a> , 最初是用channel来通知关闭的。外部goroutine close掉这个channel来通知。但这样需要在创建listener的协程中另起一个协程来监听这个channel。多个listener就起了多个监听的协程,感觉浪费。 大致代码如下: ``` func NewSrv() { ln, err := net.ListenTCP() defer ln.Close() ... go func() { <- exitChann ln.Close() } for { c, err:= ln.Accept() .... } } ``` 现在改成了1楼的建议: ``` func NewSrv() { ln, err := net.ListenTCP() defer ln.Close() ... for { select { case <- exitChann: return default: ln.SetDeadlin() c, err := ln.Accept() .... } } } ``` 问题的关键是listener非线程安全的,但又不好用加锁等方法来做同步