线程如何影响通过引用传递

本文关键字:引用 影响 何影响 线程 | 更新日期: 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中的两个对象之间共享,例如共享列表,则需要确保它是线程安全的集合,或者如果它是另一个引用类型,则需要进行锁定。