一:Mutex,线程或进程间同步
(1)进程同步
static bool IsCreated = false;
Mutex mm = new Mutex(true, "aaa", out IsCreated);
(1)true:直接为正在执行这句话的线程使用这个互斥锁。相当于在该线程使用了WaitOne()
(2)out IsCreated输出指示名为"aaa"的锁是否是第一次创建,如果是第一次创建返回True,不是第一次返回False,用这个特性可以进程间同步,只允许启动一个进程。
if (IsCreated == false)
{
MessageBox.Show("已经打开了一个程序");
return;
}
//这样放在主程序里调用就保证不会同时启动2个程序, 因为Mutex作用于全局操作系统,因此可实现进程间同步
(2)线程同步
//MUTEX: 某线程占用锁用WaitOne() ,释放锁用ReleaseMutex()
//使用案例:
//【1】先把锁给主线程,使其占用该锁
//【2】在要阻止的子线程中使用WaitOne()以预定该子线程使用锁,此时因为主线程已使用该锁,因此子线程因为没有锁会再WaitOne()这句话阻塞
//【3】在主线程中使用ReleaseMutex()释放锁,此时子线程得到锁开始执行。当子线程执行完后也使用ReleaseMutex()释放锁以便下次使用
//【4】再在主线程中调用WaitOne()方法以使主线程再次占用该锁。
static bool IsCreated = false;
Mutex mm = new Mutex(true, "aaa", out IsCreated); //主线程中调用以占用锁
public void AFunc() //一个可供任意线程调用的方法
{
mm.WaitOne()