У меня гонка за данными, и я не могу понять, почему. Выполняя свои тесты с помощью команды -race
, я сузил ее до попытки получить доступ к list.List
при чтении из нее, но мои мьютексы, похоже, ничего не делают.
У меня есть ряд * list.Lists внутри массива, например:
type MyList struct {
mutex sync.Mutex
*list.List
}
type SomeObj struct {
data string
}
var myListOfLists [10]MyList
Я читаю и пишу из списка вот так:
list := myListOfLists[someIndex]
list.mutex.Lock()
for e := list.Front(); e != nil; e = e.Next() {
if (...) {
list.MoveToFront(e)
}
}
list.mutex.Unlock()
а в другой горутине также пытается прочитать и построить полный список, чтобы вернуть
var fullCopy []*SomeObj
list := myListOfLists[someIndex]
list.mutex.Lock()
for e := list.Front(); e != nil; e = e.Next() {
fullCopy = append(fullCopy, e.Value.(SomeObj))
}
list.mutex.Unlock()
MyList
с указателями на один и тот жеlist.List
? - person Adrian   schedule 07.12.2018fullCopy []string
точен в том смысле, что он собирает строки, или вы, возможно, возвращаете указатели? - person RayfenWindspear   schedule 07.12.2018