gpt4 book ai didi

multithreading - 锁定收藏集的通常最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-03 12:52:54 24 4
gpt4 key购买 nike

假设我有一个在多线程应用程序中读写的项目集合。在某些项目上应用算法时,我会采用不同的方式来获取锁。

通过在整个操作过程中锁定:

lock(collection)
{
for each thing in things
{
get the item from collection that matches thing
do stuff with item
}
}

通过按需锁定:
for each thing in things
{
lock(collection)
{
get the item from collection that matches thing
}
do stuff with item
}

或者通过按需锁定以获得线程安全的项目集合以供以后处理,从而使集合锁定的时间更短:
Items items
for each thing in things
{
lock(collection)
{
get the item from collection that matches thing
}
items.Add(item)
}
for each item in items
{
do stuff with item
}

我知道它最终可能取决于应用于每个项目的实际算法,但是您会怎么做?我正在使用C++,但是我很确定它是无关紧要的。

最佳答案

看一看Double Check lock模式,该模式为锁下的collection/field涉及单独的字段。

同样值得一看的是Readers-writer lock技术,它允许读取而另一个线程更新集合

编辑:
正如大卫·赫弗南(David Heffernan)提到的,看看The "Double-Checked Locking is Broken" Declaration的讨论

关于multithreading - 锁定收藏集的通常最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7469145/

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