29 lines
463 B
Go
29 lines
463 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
/*
|
|
@Ref: https://livebook.manning.com/book/go-in-practice/chapter-3/65
|
|
*/
|
|
|
|
func main() {
|
|
lock := make(chan bool, 1)
|
|
for i := 1; i < 7; i++ {
|
|
go worker(i, lock)
|
|
}
|
|
|
|
time.Sleep(10 * time.Second)
|
|
}
|
|
|
|
func worker(id int, lock chan bool) {
|
|
fmt.Printf("%d wants the lock\n", id)
|
|
lock <- true
|
|
fmt.Printf("%d has the lock\n", id)
|
|
time.Sleep(500 * time.Millisecond)
|
|
fmt.Printf("%d is releasing the lock\n", id)
|
|
<-lock
|
|
}
|