c# TPL中的数据竞争-Data Race
2024-10-20 03:29:10
例一: Parallel.For(1, arraySize, i =>
{
ary[i] = ary[i] + ary[i - 1];
});
如下:
object _lock = new object();
Parallel.For(1, arraySize, i =>
{
lock(_lock)
ary[i] = ary[i] + ary[i - 1];
});
解决方案:lock 确保当一个线程位于代码的临界区时,另一个线程不进入临界区,如果其他线程试图进入锁定的代码,则它将一直等待,直到该对象被释放
例二:
private static readonly AsyncLocal<LocalLifeTineScopelrapper> AsynclLocallLifeScope = new AsyncLocal<LocalLifeTimeScopelrapper>(); private static ILifetimeScope GetCurrentUow()
{
var uow = AsyncLocalLifeScope.Value ? .LifetimeScope;
if(uow == null)
{
return null;
}
return uow;
}
解决如下
private static ILifetimeScope GetCurrentUow()
{
lock(AsynclLocallLifeScope)
{
var uow = AsyncLocalLifeScope.Value ? .LifetimeScope;
if(uow == null)
{
return null;
}
return uow;
}
}
最新文章
- shell 中的与、或表达式
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 太阳系Demo(openGL)
- SAP ALV OO 选择行打印
- C# 生成BMP图片
- user database的initial size和dbcc shrinkfile
- Model元数据解析
- 浅谈Java内存及GC
- leetcode_Substring with Concatenation of All Words
- uva 657
- Swift - 移除页面视图上的所有元素
- 快速破解ps方法
- Android WebView基本使用
- 点击jsp页面上的超链接后怎么找到对应的servlet
- hiredis的安装
- android xml 解析汉字只出来一个字的问题
- 【转载】C#, VB.NET如何将Excel转换为PDF
- javascript、js操作json对象和字符串互相转换方法
- CSS3 文本超出后显示省略号...
- python&#39;s is&;==区别