英文:
Creating a synchronized list in golang
问题
首先,如果这是一个愚蠢的问题,请原谅我。
我想在我的Go项目中创建一个通用的同步列表(类似于Java中的列表),以便重复使用。
我找到了Go的链表的源代码,我想知道是否只需在列表操作函数中添加互斥锁是否足够?
英文:
Firstly, forgive me if this is a stupid question.
I would like to create a generic synchronised list (like in Java) for reuse in my Go projects.
I found the source of Go's linked list and I was wondering would it be sufficient to simply add mutex locks to the list manipulation functions?
答案1
得分: 4
如果你要创建一个并发安全的容器,你需要保护对数据的所有访问,而不仅仅是写操作。在没有同步读取的情况下检查一个元素,甚至调用Len()
可能会返回无效或损坏的数据。
最好是使用互斥锁来保护整个数据结构,而不是实现自己的并发链表。
英文:
If you're going to make a concurrent-safe container, you need to protect all access to the data, not just writes. Inspecting an element, or even calling Len()
without synchronizing the read could return invalid or corrupt data.
It's probably easier to protect the entire data structure with a mutex, rather than implement your own concurrent linked list.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论