社区
C#
帖子详情
C# 多线程程序如何不会重复获取公共资源
wanmm21cn
2012-08-02 10:54:16
我有一个List用于存放一批公共资源,程序生成n个线程来对数据进行处理,每个进程都会到List中获取一个值然后计算,当一个进程计算结束后他会再到List中取值。如何才能保证不会因有两个进程同时到List中取值而读取到同一个值?
...全文
249
7
打赏
收藏
C# 多线程程序如何不会重复获取公共资源
我有一个List用于存放一批公共资源,程序生成n个线程来对数据进行处理,每个进程都会到List中获取一个值然后计算,当一个进程计算结束后他会再到List中取值。如何才能保证不会因有两个进程同时到List中取值而读取到同一个值?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
stonespace
2012-08-03
打赏
举报
回复
你也可以用Monitor.TryEnter 方法来锁定共享对象,比如你的List,确保一个时间只有一个线程能对List进行操作,这个Monitor相当于是临界区的同步对象,而lock本身就是用Monitor类实现的,
stonespace
2012-08-03
打赏
举报
回复
当然可以加锁,而且很容易,用lock关键字:
T rObj;
lock(list)
{
rObj=list.First;
list.RemoveFirst();
}
//处理rObj;
...
[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:
取过数据后就remove掉List中刚刚取过的那个值
但是如果两个进程同时来读取呢?第一个进程读了,还没remove就被第二个进程读了呢?这不是和数据库脏数据一样么,能像数据库那样加锁吗?
[/Quote]
iyomumx
2012-08-03
打赏
举报
回复
4.0就简单多了。用PLINQ就可以。
list.WithDegreeOfParallelism(n).ForAll(x =>
{
//要执行的内容
});
不是4.0的话,可以另外new object用作同步对象,访问list时加锁,取得值后解锁即可
cnwhm2012
2012-08-03
打赏
举报
回复
定义一个互斥变量Mutex 然后lock它再执行你需要的操作
wanmm21cn
2012-08-02
打赏
举报
回复
[Quote=引用 3 楼 的回复:]
首先要分清楚“线程"和”进程“是两个差别很大的概念。
然后,你可以试试.net 4.0的并行计算新特性 Parallel.For()和 Parallel.ForEach()
可以简洁明了的解决你的问题。
[/Quote]
是多线程,平时进程说的多,说乱了。
谢谢,我查查你说的这两个新东东去
bwangel
2012-08-02
打赏
举报
回复
首先要分清楚“线程"和”进程“是两个差别很大的概念。
然后,你可以试试.net 4.0的并行计算新特性 Parallel.For()和 Parallel.ForEach()
可以简洁明了的解决你的问题。
wanmm21cn
2012-08-02
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
取过数据后就remove掉List中刚刚取过的那个值
[/Quote]
但是如果两个进程同时来读取呢?第一个进程读了,还没remove就被第二个进程读了呢?这不是和数据库脏数据一样么,能像数据库那样加锁吗?
C#
全能速查宝典
《
C#
全能速查宝典》共分为8章,分别介绍了
C#
语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和
C#
高级编程,共包含562个
C#
编程中常用...
C#
多线程
如何访问同一个数据
C#
使用Monitor类、lock和Mutex类进行
多线程
同步 在
多线程
中,为了使数据保持一致性必须要对数据或是访问数据的函数加锁,在数据库中这是很常见的,但是在
程序
中大部分都是单线程的
程序
,所以没有加锁的必要,但是在...
C#
多线程
和Socket网络编程精讲
【教学理念】 1、把“需要工作的人”变成“工作... 3、物美价廉:本着知识共享、服务社会宗旨,诣在为更多有需求者提供服务。 此外,提供源代码+答疑+上课讲义,为学生毕业设计、找工作面试等提供指导。
C#
详细的
多线程
和线程同步学习总结
正在运行的应用
程序
被视为进程,进程可以有多个线程。 进程之间是相对独立的,一个进程无法访问另一个进程的数据(除非利用分布式计算方式), 一个进程运行的失败也
不会
影响其他进程的运行,Windows系统...
c#
多线程
学习笔记
当一个线程需要访问共享资源时,它会尝试
获取
锁。总的来说,同步/异步关注的是消息通知的机制,而阻塞/非阻塞关注的是
程序
(线程)等待消息通知时的状态。 Priority有个几个设置等级分别为:Lowest,BelowNormal,...
C#
110,536
社区成员
642,578
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章