Н
Size: a a a
Н
⛪
ВС
Н
ВС
ВС
ВС
AS
D
func main() {
lock := make(chan bool, 1)
for i := 1; i < 5; 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
}
AS
func main() {
lock := make(chan bool, 1)
for i := 1; i < 5; 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
}
D
4 has the lock
1 wants the lock
2 wants the lock
3 wants the lock
4 is releasing the lock
1 has the lock
D
4 wants the lock
1 wants the lock
2 wants the lock
3 wants the lock
AS
4 wants the lock
1 wants the lock
2 wants the lock
3 wants the lock
D
При использовании каналов в роли блокировок часто реализуется
следующий сценарий:
1. Функция устанавливает блокировку, отправляя сообщение
в канал.
2. Продолжает выполнение критичных операций.
3. Освобождает блокировку, читая сообщение из канала.
4. Любая функция, попытавшаяся установить блокировку до ее
снятия, будет приостановлена в при попытке выполнить запись
в канал (заблокируется).
AS
При использовании каналов в роли блокировок часто реализуется
следующий сценарий:
1. Функция устанавливает блокировку, отправляя сообщение
в канал.
2. Продолжает выполнение критичных операций.
3. Освобождает блокировку, читая сообщение из канала.
4. Любая функция, попытавшаяся установить блокировку до ее
снятия, будет приостановлена в при попытке выполнить запись
в канал (заблокируется).
ВС
При использовании каналов в роли блокировок часто реализуется
следующий сценарий:
1. Функция устанавливает блокировку, отправляя сообщение
в канал.
2. Продолжает выполнение критичных операций.
3. Освобождает блокировку, читая сообщение из канала.
4. Любая функция, попытавшаяся установить блокировку до ее
снятия, будет приостановлена в при попытке выполнить запись
в канал (заблокируется).
D