private int interLocked = 9;
private int lockInt = 19;
private object lockObj = new object();
private Mutex mutex;
private Semaphore semaphore = new Semaphore(2,
2);
public MainPage()
{
this.InitializeComponent();
}
protected override void
OnNavigatedTo(NavigationEventArgs e)
{
//线程同步:
Interlocked
ThreadPool.RunAsync(
(source) =>
{
Interlocked.Increment(ref interLocked);
//Interlocked.Decrement(ref interLocked);
},
WorkItemPriority.Normal);
//lock
ThreadPool.RunAsync(
(source) =>
{
lock (lockObj)
{
lockInt++;
lockInt *=
5;
}
},
WorkItemPriority.Normal);
//Monitor
ThreadPool.RunAsync(
(source) =>
{
Monitor.Enter(lockObj);
Monitor.Wait(lockObj);//释放对象上的锁并进入对象的等待队列
//Monitor.Pulse(lockObj);//通知等待队列中的线程锁定对象状态的更改
Monitor.Exit(lockObj);//释放指定对象上的锁
},
WorkItemPriority.Normal);
//Mutex
ThreadPool.RunAsync(
(source) =>
{
bool isNotRunning;
mutex = new Mutex(true, "MSI-Muxtex", out
isNotRunning);
if (!isNotRunning)
{
//Do
Something ...
}
},
WorkItemPriority.Normal);
//Semaphore
ThreadPool.RunAsync(
(source) =>
{
//阻止当前线程,直到当前WaitHandle收到信号
semaphore.WaitOne();
//退出信号量并返回前一个计数
semaphore.Release();
},
WorkItemPriority.Normal);
//AutoResetEvent autoRestEvent = new AutoResetEvent(false);
//autoRestEvent.Set();
//ManualResetEvent manualRestEvent = new
ManualResetEvent(false);
//manualRestEvent.Set();
//manualRestEvent.Reset();
EventWaitHandle eventWaitHandle = new EventWaitHandle(false,
EventResetMode.AutoReset, "msiEventWaitHandle");
eventWaitHandle.WaitOne();
eventWaitHandle.Set();
eventWaitHandle.Reset();
}