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

有好几个线程都要调用一个方法,怎么保证某一时间方法只被一个线程调用,其他线程等待,或者排队。比如thread1在调用方法A,thread2、thread3等待,等thre... 有好几个线程都要调用一个方法,怎么保证某一时间方法只被一个线程调用,其他线程等待,或者排队。
比如thread1在调用方法A,thread2、thread3等待,等thread1结束,线程2、3再有一个去调用方法A。
最好提供点代码,不懂线程排队的技术。
展开
 我来答
百度网友97df5c0af
推荐于2017-11-25 · TA获得超过568个赞
知道小有建树答主
回答量:490
采纳率:0%
帮助的人:562万
展开全部
要同一时间使方法只受到一个线程访问只需加线程锁,例如:
void f()
{
lock(this)
{
// your code here
}
}
但是你说需要排队的话那是另外一个问题,因为线程竞争锁是没有序的,极端情况是,永远有一个线程争不到锁。
这时你需要一个队列,来保证你线程的请求是有序的!
例如:
List<Action> actions = new List<Action>();

actions.Add(()=>{/* your code here */});
...
另一线程就不断从这个队列内读取请求然后执行,这样必须执行方和使用方一起改动。
哲事姓无
2013-03-01 · TA获得超过1176个赞
知道小有建树答主
回答量:903
采纳率:100%
帮助的人:444万
展开全部
  类似如下方式,假设函数名为a,应该能满足大部分的使用情景,并且只要不在到处使用lock(this), 这个方式也是安全的。
  void a()
  {  
  lock (this)
  {
   // 原来的函数内容放在这里
  }
  }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
syht2000
高粉答主

2013-03-01 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
查一下Monitor.Enter的用法,如果涉及到顺序可以用AutoResetEvent
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lbp0408
2013-03-01 · TA获得超过256个赞
知道小有建树答主
回答量:703
采纳率:0%
帮助的人:220万
展开全部
lock 关键字
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
guixianfen
2013-03-01
知道答主
回答量:39
采纳率:0%
帮助的人:9.8万
展开全部
Lock锁,可以解决这个问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式