gpt4 book ai didi

c# - 线程如何影响引用传递?

转载 作者:行者123 更新时间:2023-11-30 23:32:09 25 4
gpt4 key购买 nike

以下面的代码为例,简化后忽略数据为空的事实:

    ConcurrentBag<object> _mySharedData;
bool _stop = false;

public void SetThreads()
{
foreach(var item in _mySharedData)
{
Task.Factory.StartNew((state) => {
while (!_stop)
DoStuffWithItemAsReference(item);
}, TaskCreationOptions.LongRunning);
}
}

共享数据包含一组设置,每个设置都对应于该线程中正在运行的内容。然而,问题是有时他们也需要查看其他线程的设置。只要加锁,代码线程就安全了吗?如果从另一个线程中为一个线程更新设置,那是如何工作的?因为现在我们有一个引用 _mySharedData 集合中的项目的线程,更改其属性是否安全?

谢谢

最佳答案

ConcurrentBag 是线程安全的,您不需要锁定它。

如果设置在 mySharedData 中的两个对象之间共享,例如共享一个列表,您将需要确保这是一个线程安全的集合,或者如果它是另一种引用类型则进行锁定。

关于c# - 线程如何影响引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34386006/

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