问题描述
需求:privatevoidStartRead()//多个线程会调用此方法{A.Reset(_stuNo);//如果第一次_stuNo=1,进来,没被调用,则调用//第二次,如果_stuNo=1,发现之前已经被调用过,则不执行A.Reset(_stuNo);}[DllImport("AA.dll",EntryPoint="StartRead",CallingConvention=CallingConvention.StdCall)]publicstaticexternshortStartRead(string_stuNo.);
请问以上需求,怎么做?
解决方案
解决方案二:
privatevoidStartRead(){lock(this){if(_stuNo==1)return;_stuNo==1;}//你的代码}
解决方案三:
我的意思是,A.Reset(1);这个方法,如果A线程调用,发现B线程已经调用过了,则A将不能调用
解决方案四:
再加个变量呗,还能有什么方法object_lock=newobject();bool_b=false;privatevoidStartRead()//多个线程会调用此方法{lock(_lock){if(_stuNo==1&&!_b){_b=true;A.Reset(_stuNo);}}}[DllImport("AA.dll",EntryPoint="StartRead",CallingConvention=CallingConvention.StdCall)]publicstaticexternshortStartRead(string_stuNo.);
解决方案五:
如果C线程调用呢?1L的意思就是做个全局变量,用于标志只能执行一次
时间: 2024-09-20 15:46:00