Hos*_*146 3 c# concurrency multithreading locking
我有以下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. }
Run Code Online (Sandbox Code Playgroud)
我的问题是这个.一旦'bandEdgeList'填充在第3行,如果另一个线程修改了CicApplication.BandEdgeCache的内容,'bandEdgeList'的内容是否会失效?我在CicApplication.BandEdgeCache getter/setter中有一个锁.但是我想知道是否应该锁定这段代码,以便在我使用'bandEdgeList'时CicApplication.BandEdgeCache的内容不会改变.
不是自动的,但这仍然不是线程安全的.它可能会抛出一个InvalidOperationException.
一旦ToList被调用,它就会保存这些引用的副本.但是如果BandEdgeCache在发生这种情况时另一个线程会修改,那么就会发生不好的事情
所以,你应该锁定所有引用BandEdgeCache.
但是沿着保存列表的行,这将是安全的,但是修改any BandEdge不是没有锁定的线程安全.
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |