Исходники и презентации

This commit is contained in:
2025-05-23 07:26:39 +03:00
parent aa948179d5
commit 02d8430a3a
514 changed files with 13773 additions and 0 deletions

View File

@ -0,0 +1,38 @@
package main
import (
"sync"
)
type Semaphore struct {
count int
max int
condition *sync.Cond
}
func NewSemaphore(limit int) *Semaphore {
mutex := &sync.Mutex{}
return &Semaphore{
max: limit,
condition: sync.NewCond(mutex),
}
}
func (s *Semaphore) Acquire() {
s.condition.L.Lock()
defer s.condition.L.Unlock()
for s.count >= s.max {
s.condition.Wait()
}
s.count++
}
func (s *Semaphore) Release() {
s.condition.L.Lock()
defer s.condition.L.Unlock()
s.count--
s.condition.Signal()
}