互斥锁(Mutex)
互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它。
互斥锁可适用于一个共享资源每次只能被一个线程访问的情况
当两个或更多线程需要同时访问一个共享资源时,系统需要使用同步机制来确保一次只有一个线程使用该资源。
Mutex是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。
按我的理解就是说:很多人排队到一台ATM取款、必须要等到第一个人取完以后、第二个人才能使用、这样依次类推。
献上使用代码:
public void AutomaticSubmitProcess(int MaxQueueStep,string System) { bool bCreateNew = false; Mutex mut = new Mutex(true, "name", out bCreateNew); //使用一个指示调用线程是否应拥有互斥体的初始所属权的布尔值、 //一个作为互斥体名称的字符串, //以及一个在方法返回时指示调用线程是否被授予互斥体的初始所属权的布尔值来初始化 Mutex 类的新实例。 if (bCreateNew == false) { // 说明有人正在ATM取钱、请排队。 Console.WriteLine("Another Instance is running!"); return; } //现在可以在ATM取钱了、 DataSet ds = alc.GetProcessOperationQueue(MaxQueueStep, "UBI"); if (ds.Tables[0].Rows.Count > 0) { //涉及项目,就不贴出数据修改了、谅解 } mut.ReleaseMutex();//释放 Mutex 一次。 mut.Close(); mut.Dispose(); }
第一次使用、仅发表我的理解、如果说错了、希望提出修改、