猿问

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

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


HUX布斯
浏览 4279回答 3
3回答

白衣染霜花

要同一时间使方法只受到一个线程访问只需加线程锁,例如:void f(){lock(this){// your code here}}但是你说需要排队的话那是另外一个问题,因为线程竞争锁是没有序的,极端情况是,永远有一个线程争不到锁。这时你需要一个队列,来保证你线程的请求是有序的!例如:List<Action> actions = new List<Action>();actions.Add(()=>{/* your code here */});...另一线程就不断从这个队列内读取请求然后执行,这样必须执行方和使用方一起改动。

米脂

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