为了账号安全,请及时绑定邮箱和手机立即绑定

C#如何处理多个线程同时调用一个方法

C#如何处理多个线程同时调用一个方法

C#
HUX布斯 2019-03-27 18:17:06
C#如何处理多个线程同时调用一个方法
查看完整描述

3 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

要同一时间使方法只受到一个线程访问只需加线程锁,例如:
void f()
{
lock(this)
{
// your code here
}
}
但是你说需要排队的话那是另外一个问题,因为线程竞争锁是没有序的,极端情况是,永远有一个线程争不到锁。
这时你需要一个队列,来保证你线程的请求是有序的!
例如:
List<Action> actions = new List<Action>();

actions.Add(()=>{/* your code here */});
...
另一线程就不断从这个队列内读取请求然后执行,这样必须执行方和使用方一起改动。

查看完整回答
反对 回复 2019-03-30
?
米脂

TA贡献1836条经验 获得超3个赞

最简单的方法,把这个变量加锁,或者把函数方法加锁,使其同一时间只能被一个线程调用。
但这样牺牲了效率,所以首先你还是得思考以下问题:
1.这个变量值会被其他线程改变吗?
如果1的回答是否定的,那么线程之间应该不会受影响
如果是肯定的,思考问题:
2.一定要在其他线程中改变这个变量吗?

如果是否定的,考虑使用临时变量或者局部变量代替原变量
如果肯定的,还是考虑加锁吧


查看完整回答
反对 回复 2019-03-30
  • 3 回答
  • 0 关注
  • 4277 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信