当前位置: 首页 > 编程语言 > C#

共享资源锁Share

时间:2023-04-10 22:14:56 C#

共享资源锁我正在使用C#-WebAPISelfHoston.NET4.5。在服务器端,我有一个不是线程安全的进程:它一次只能处理一个请求。我如何在控制器代码中锁定此资源(进程),以便按顺序为客户端提供服务,等待资源在使用前被释放?类似于:while(true){if(!process.isLocked)break;}lock(process)do(work)unlock(process)warn(others)任何代码片段或建议都值得赞赏。提前致谢。如果您正在寻找要执行的每个线程,但一次只执行一个线程,那么您可以将lock语句与静态对象一起使用:privatestaticobjectlockobj=newobject();publicvoidDoWorkWhenNotBusy(){lock(lockobj){//做工作Console.WriteLine("Working#1(shouldalwayscomplete...");线程.睡眠(500);如果您希望线程在对象被锁定后立即返回,那么您可以这样做Write(double-checkedlocking):privatestaticobjectlockobj2=newobject();privatevolatileboollocked=false;publicvoidDoWorkIfNotBusy(){if(!locked){lock(lockobj2){if(!locked){locked=true;//工作Thread.Sleep(500);Console.WriteLine("Working#2(仅当不忙时)...");}锁定=假;}}}测试示例:for(inti=0;我想在这里扩展dbaseman的回答。具体来说,他的DoWorkIfNotBusy方法。我认为这是一个不好的例子(由于可能的竞争条件),并想展示我认为是正确的做法:以上就是关于C#学习教程:共享资源锁共享的全部内容,如果它对每个人都有用并且需要的话了解更多C#学习教程,希望大家多多关注---privatestaticobjectlockobj=newobject();publicboolDoWorkIfNotBusy(){boollockWasTaken=false;vartemp=lockobj;尝试{Monitor.TryEnter(temp,reflockWasTaken);{//在这里工作..//信不信由你,这项工作所在的括号很重要。//括号用于解决竞争条件。}}finally{if(lockWasTaken)Monitor.Exit(temp);}返回lockWasTaken;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: