c# – 为什么需要锁?

c# – 为什么需要锁?,第1张

概述我正在看一个关于p的例子.斯蒂芬克莱里的40本书就是这本书 // Note: this is not the most efficient implementation. // This is just an example of using a lock to protect shared state. static int ParallelSum(IEnumerable<int> valu 我正在看一个关于p的例子.斯蒂芬克莱里的40本书就是这本书

// Note: this is not the most efficIEnt implementation. // This is just an example of using a lock to protect shared state. static int ParallelSum(IEnumerable<int> values){    object mutex = new object();    int result = 0;    Parallel.ForEach(source: values,localinit: () => 0,body: (item,state,localValue) => localValue + item,localFinally: localValue =>        {            lock (mutex)                result += localValue;       });   return result;}

我有点困惑为什么需要锁.因为如果我们所做的只是汇总一组整数,比如说{1,5,6},那么我们就不需要关心以任何顺序递增的共享和结果.

(1 + 5) + 6 = 1 + (5 + 6) = (1 + 6) + 5 = ...

有人能解释我的思想在哪里有缺陷吗?

我想我的身体方法有点困惑不能简单

int result = 0;Parallel.ForReach(values,(val) => { result += val; }); return result;
解决方法 语句结果= localValue;真的是说结果=结果localValue;您正在读取和更新由不同线程共享的资源(变量).这很容易导致竞争条件. lockmakes确保在任何给定时刻该语句由单个线程访问. 总结

以上是内存溢出为你收集整理的c# – 为什么需要锁?全部内容,希望文章能够帮你解决c# – 为什么需要锁?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1225264.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存