2 回答
TA贡献1862条经验 获得超7个赞
没有互斥锁。当代码执行时解锁():
if currentNode == nil {
fmt.Println("There are no patients.")
return nil
}
您正在锁定,但从未解锁:
func (p *queue) displayallpatients() error {
defer wg.Done()
mutex.Lock() // <- here we acquire a lock
{
currentNode := p.front
if currentNode == nil {
fmt.Println("There are no patients.")
return nil // <- here we return without releasing the lock
}
// ...
}
mutex.Unlock() // <- never reach if currentNode == nil is true
return nil
}
您可以使用延迟或不要进行提前返回来解决此问题:
func (p *queue) displayallpatients() error {
defer wg.Done()
defer mutex.Unlock() // <- defers the execution until the func returns (will release the lock)
mutex.Lock()
{
currentNode := p.front
if currentNode == nil {
fmt.Println("There are no patients.")
return nil
}
// ...
}
return nil
}
您可以在文档中找到更多详细信息
- 2 回答
- 0 关注
- 69 浏览
添加回答
举报