gpt4 book ai didi

c# - 多线程程序锁在 List> 的内部 Stack 上。这样可以吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:14 24 4
gpt4 key购买 nike

我想知道这是否是有效的锁定。在我的类(class)(这是一个单例)中,我有这行代码:

private List<Stack<Person>> _persons = List<Stack<Person>>();

我想知道这段代码是否有效?

Stack s = GetCorrectStack();  // pick a stack from the _persons
lock(s)
{
// do a push or pop on the s stack
}

我问这个是因为所有关于锁定的示例似乎都在锁定类的成员。

另外,除了像我上面那样只使用 Stack,我可以使用 ConcurrentStack 而只是避免使用锁吗?

最佳答案

I am wondering if this code would work?

这取决于Stack的范围是什么是。如果您要返回堆栈,以便有人可以从外部修改它,请不要将其用作锁。这也意味着 GetCorrectStack必须是线程安全的,因为 List<T>不是。

你绝对可以使用ConcurrentStack而不是为了线程安全。你也可以使用 ConcurrentBag<T>而不是 List<T> .请注意,前者是无序的,而后者则相反。

作为旁注 - 如果您使用 GetCorrectStack通常,它会遍历整个列表,使用 ConcurrentDictionary<TKey, TValue> 可能会更好适用于快速查找。

关于c# - 多线程程序锁在 List<Stack<Person>> 的内部 Stack 上。这样可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32226588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com