C#如何处理多个线程同时调用一个方法
3 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
要同一时间使方法只受到一个线程访问只需加线程锁,例如:
void f()
{
lock(this)
{
// your code here
}
}
但是你说需要排队的话那是另外一个问题,因为线程竞争锁是没有序的,极端情况是,永远有一个线程争不到锁。
这时你需要一个队列,来保证你线程的请求是有序的!
例如:
List<Action> actions = new List<Action>();
actions.Add(()=>{/* your code here */});
...
另一线程就不断从这个队列内读取请求然后执行,这样必须执行方和使用方一起改动。
米脂
TA贡献1836条经验 获得超3个赞
最简单的方法,把这个变量加锁,或者把函数方法加锁,使其同一时间只能被一个线程调用。
但这样牺牲了效率,所以首先你还是得思考以下问题:
1.这个变量值会被其他线程改变吗?
如果1的回答是否定的,那么线程之间应该不会受影响
如果是肯定的,思考问题:
2.一定要在其他线程中改变这个变量吗?
如果是否定的,考虑使用临时变量或者局部变量代替原变量
如果肯定的,还是考虑加锁吧
- 3 回答
- 0 关注
- 4277 浏览
添加回答
举报
0/150
提交
取消