package semaphore type SemaChan struct { sem chan struct{} // 信号量通道 } func NewSemaChan(n int) *SemaChan { if n <= 0 { n = 1 // 确保信号量至少为1,直接变成一个互斥锁 } sem := make(chan struct{}, n) // 初始化信号量通道,容量为n for i := 0; i < n; i++ { sem <- struct{}{} } return &SemaChan{ sem: sem, } } func (s *SemaChan) Lock() { <-s.sem } func (s *SemaChan) Unlock() { s.sem <- struct{}{} }