我试图了解互斥锁是如何工作的。从我目前的理解来看,它是用来承载原子操作和同步访问一些数据的。
我在这里构建了一个队列数据结构的例子:https : //github.com/arnauddri/algorithms/blob/master/data-structures%2Fqueue%2Fqueue.go
下面是一些代码:
package queue
import "sync"
type Queue struct {
queue []interface{}
len int
lock *sync.Mutex
}
func New() *Queue {
queue := &Queue{}
queue.queue = make([]interface{}, 0)
queue.len = 0
return queue
}
func (q *Queue) Push(el interface{}) {
q.lock.Lock()
defer q.lock.Unlock()
q.queue = append(q.queue, el)
q.len++
}
但是,当我尝试创建队列并将项目推送到该队列时,出现运行时错误:
q := New()
q.Push(1)
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference
我真的不明白这里发生了什么。
我应该如何在这里使用互斥锁?
慕哥9229398
相关分类