在golang中创建同步列表

5

首先,如果这是一个愚蠢的问题,请原谅我。 我想创建一个通用的同步列表(就像在Java中),以便在我的Go项目中重复使用。 我找到了Go的链表源代码,我想知道是否简单地在列表操作函数中添加互斥锁就足够了?


像这样的线程(https://groups.google.com/forum/#!topic/golang-nuts/PWU3f3i5ziY)表明,线程安全列表的预期用途很重要,可以帮助选择不同的同步方法。 - VonC
缓冲通道不能用于这个吗?除了静态大小之外,它只是一个同步的FIFO列表。 - Not_a_Golfer
@Not_a_Golfer 我不确定是否能使用缓冲通道,因为我想要从列表中移除和搜索项目。 - W.K.S
1个回答

4
如果你要创建一个并发安全的容器,你需要保护对数据的所有访问,而不仅仅是写入。未同步读取的检查元素甚至调用`Len()`可能会返回无效或损坏的数据。
最好使用互斥锁来保护整个数据结构,而不是实现自己的并发链表。

3
此外,一个有缓冲的通道或由互斥锁保护的切片也可能满足原帖作者的需求。 - Charlie Tumahai
是的,实际上并不经常需要双向链表,尤其是用于在各种项目中重复使用的并发链表。 - JimB
1
@3of3 一个由互斥锁保护的切片正是我最初想到的。 - W.K.S
1
我认为加上示例代码会让这个答案更好。 - tim-montague

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接