Nope, it's not safe.
https://play.golang.org/p/pcPdKixphL
Run this program in a loop and it will panic eventually.
On Wednesday, 14 December 2016 15:19:24 UTC+11, P Q wrote:
>
> func close_safe(c chan bool) {
> select {
> case <-c:
> default:
> close(c)
> }
> }
>
> Closing a channel onece more can be a controversial topic, sometimes it is
> useuful.
> I saw the code to close a closed channel. I thought the code looked nice
> at first, but could become errernous.
>
> Let's assume that two gorutines will try to close the channel and the
> channel has not been closed. At first, groutine 1 enters the default block.
> At this time, gorutine schedule changes so that groutine 2 gets the
> execution. and the groutine 2 enters the default block, and closes the
> channel. schedule changes, gorutine 1 restores its execution and will panic
> by closing the closed channel.
>
> Could this way happen?
>
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.