gpt4 book ai didi

c# - 锁定/并发问题

转载 作者:行者123 更新时间:2023-11-30 13:49:46 29 4
gpt4 key购买 nike

我有以下 C# 代码:

1.    List<BandEdge> bandEdgeList;
2.
3. bandEdgeList = CicApplication.BandEdgeCache.Where(row => row.Coater == coater).ToList();
4. foreach (BandEdge bandEdge in bandEdgeList)
5. {
6. ...
7. ...
8. }

我的问题是这样的。一旦在第 3 行填充了'bandEdgeList',如果另一个线程修改了 CicApplication.BandEdgeCache 的内容,'bandEdgeList' 的内容是否会失效?我锁定了 CicApplication.BandEdgeCache getter/setter。但我想知道我是否应该锁定此代码块,以便在我使用“bandEdgeList”时 CicApplication.BandEdgeCache 的内容不会更改。

最佳答案

不是自动的,但这仍然不是线程安全的。它可能会抛出一个 InvalidOperationException

调用 ToList 后,它会保存这些引用的副本。但是,如果另一个线程在发生这种情况时修改了 BandEdgeCache,就会发生不好的事情。

因此,您应该锁定所有对 BandEdgeCache 的引用。

但按照保存列表的思路,这将是安全的,但修改任何 BandEdge 在没有锁定的情况下都不是线程安全的。

关于c# - 锁定/并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8356859/

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