Windows8 ThreadPool 笔记

       private int interLocked = 9;

       private int lockInt = 19;
       private object lockObj = new object();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);
//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();

        }

 

posted on 2013-03-27 11:00  JackSlaterYu  阅读(209)  评论(0)    收藏  举报