Home  >  Article  >  Backend Development  >  Will closing the golang channel also force goroutine synchronization?

Will closing the golang channel also force goroutine synchronization?

WBOY
WBOYforward
2024-02-09 20:15:31436browse

关闭 golang 通道是否也会强制 goroutine 同步?

php editor Xigua is here to answer a question about golang channels: Will closing golang channels also force goroutine synchronization? Normally, closing the channel does not force the goroutine to synchronize, but closing the channel triggers a read operation on the channel to return a zero value and a boolean value. If there is unread data in the channel, the read operation will return data and true; if there is no unread data in the channel, the read operation will return zero and false. Therefore, after closing the channel, you can determine whether all the data in the channel has been read by reading the channel.

Question content

As stated in the book "Go Programming Language" (page 226):

Communication over an unbuffered channel causes the sending and receiving goroutines to synchronize. Because of this, unbuffered channels are sometimes called synchronous channels. When a value is sent on an unbuffered channel, the receipt of the value happens before the reawakening of the sending goroutine.

Will the same happen if I close the channel? I mean, does the reception of closing a channel always happen before the goroutine that just closed it wakes up again?

I remember reading something related to it. I searched in books but couldn't find it.

Workaround

Closing the channel does not force the goroutine to synchronize like sending on an unbuffered channel.

Go Memory ModelThe specification says:

A goroutine that calls close() will not block waiting for another goroutine to receive a zero value.

A Goroutine that sends a value to an unbuffered channel will block until another Goroutine receives the value.

The above is the detailed content of Will closing the golang channel also force goroutine synchronization?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete