C# 某一时刻如何让一个方法只被一个线程调用?

2025-01-03 06:36:33
推荐回答(5个)
回答1:

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

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

回答2:

  类似如下方式,假设函数名为a,应该能满足大部分的使用情景,并且只要不在到处使用lock(this), 这个方式也是安全的。
  void a()
  {  
  lock (this)
  {
   // 原来的函数内容放在这里
  }
  }

回答3:

查一下Monitor.Enter的用法,如果涉及到顺序可以用AutoResetEvent

回答4:

lock 关键字

回答5:

Lock锁,可以解决这个问题