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
An example of using a Channel as a Mutex:
package main
var global int = 0
var c = make(chan int, 1)
func thread1(){
<-c // Grab the ticket
global = 1
c <- 1 // Give it back
}
func thread2(){
<-c
global = 2
c <- 1
}
func main() {
c <- 1 // Put the initial value into the channel
go thread1()
go thread2()
}
You could also use chan struct{}
instead of chan int
to reduce the memory size. The value that goes into it is struct{}{}
(type struct{}
and an empty content {}
). See Ivan black's comment for an example.