How can we use channels in Go in place of mutex?

前端 未结 2 908
生来不讨喜
生来不讨喜 2021-02-07 05:32

Channels combine communication—the exchange of a value—with synchronization—guaranteeing that two calculations (goroutines) are in a known state.

How is it possible to u

2条回答
  •  梦毁少年i
    2021-02-07 06:01

    If you have a channel c that you initialize with 1 item in it, then you can "check out" the "mutex" by removing the value from the channel (<-c). You can "release" it by adding the value back (c <- 1).

    Since the extract-from-channel operator a) is atomic, and b) blocks until there's something to extract, it works as a mutex, since if one thread of execution already has it checked out, there will be nothing in the channel, and thus it will block until the thread that had it checked out returns a value to the channel for another thread to extract.

提交回复
热议问题