要同一时间使方法只受到一个线程访问只需加线程锁,例如:
void f()
{
lock(this)
{
// your code here
}
}
但是你说需要排队的话那是另外一个问题,因为线程竞争锁是没有序的,极端情况是,永远有一个线程争不到锁。
这时你需要一个队列,来保证你线程的请求是有序的!
例如:
List
actions.Add(()=>{/* your code here */});
...
另一线程就不断从这个队列内读取请求然后执行,这样必须执行方和使用方一起改动。
类似如下方式,假设函数名为a,应该能满足大部分的使用情景,并且只要不在到处使用lock(this), 这个方式也是安全的。
void a()
{
lock (this)
{
// 原来的函数内容放在这里
}
}
查一下Monitor.Enter的用法,如果涉及到顺序可以用AutoResetEvent
lock 关键字
Lock锁,可以解决这个问题