分享

Windows8线程间通信与同步

 牛人的尾巴 2015-12-01

Windows8线程间通信与同步

(2013-03-19 09:09:58)
       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();

        }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多