线程如何影响通过引用传递
本文关键字:引用 影响 何影响 线程 | 更新日期: 2023-09-27 18:27:41
以以下代码为例,简化后忽略数据为空的事实:
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中的两个对象之间共享,例如共享列表,则需要确保它是线程安全的集合,或者如果它是另一个引用类型,则需要进行锁定。