package semaphore import "sync" type SemaChan struct { sync.Locker sem chan struct{} // 信号量通道 } func NewSemaChan(n int) *SemaChan { if n <= 0 { n = 1 // 确保信号量至少为1,直接变成一个互斥锁 } return &SemaChan{ sem: make(chan struct{}, n), // 初始化信号量通道,容量为n } } func (s *SemaChan) Lock() { <-s.sem // 使用接收的方式阻塞,用来与 sync.Mutex 的内存模型保持一致 } func (s *SemaChan) Unlock() { s.sem <- struct{}{} }