|
|
@@ -15,6 +15,7 @@
|
|
|
- [Работа с select](#работа-с-select)
|
|
|
- [Пример мультиплексора](#пример-мультиплексора)
|
|
|
- [Пример демультиплексора](#пример-демультиплексора)
|
|
|
+ - [Пример семафора](#пример-семафора)
|
|
|
|
|
|
Каналы в `go` являются попыткой решить проблему безопасности данных в конкуретной среде.
|
|
|
Это неидеальная попытка реализовать [монитор Хоара](https://ru.wikipedia.org/wiki/Монитор_(синхронизация)). Неидеальность связана с тем, что подавляющая часть решений в `go` продиктована несколькими соображениями:
|
|
|
@@ -221,6 +222,21 @@ func run(chIn <-chan int){
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
+## Пример семафора
|
|
|
+
|
|
|
+```golang
|
|
|
+chEnd := make(chan struct{}, 1)
|
|
|
+
|
|
|
+go func(){
|
|
|
+ defer close(chEnd)
|
|
|
+ time.Sleep(time.Second * 1)
|
|
|
+}()
|
|
|
+
|
|
|
+<-chEnd
|
|
|
+
|
|
|
+log.Println("End work")
|
|
|
+```
|
|
|
+
|
|
|
|
|
|
Примеры использования каналов:
|
|
|
|