rabbit-dev

現役スマフォプログラマーが適当にプログラム関係の記事を放り込むブログ

排他制御を行う方法

Xamarin.iOS等で排他制御したい場合はMutexを使えばいい。WaitOneでロックしてReleaseMutexで開放。かんたんなコードだが添付しておく。

コード

https://gist.github.com/4d075d411183bacabcb46fab670591e7

using System;
using System.Threading;

namespace Sample
{
    public class SampleClass
    {
        private Mutex mMutex = new Mutex();
        
        void methodA(){
            mMutex.WaitOne();
            
            Console.WriteLine("methodA 1");
            Thread.Sleep(10);
            Console.WriteLine("methodA 2");
            
            mMutex.ReleaseMutex();
        }

        void methodB(){
            mMutex.WaitOne();
            
            Console.WriteLine("methodB 1");
            Thread.Sleep(5);
            Console.WriteLine("methodB 2");
            
            mMutex.ReleaseMutex();
        }
    }
}

結果

mMutex.WaitOneとReleaseMutexがない状態でmethodA→methodBの順に実行されると

methodA 1
methodB 1
methodB 2
methodA 2

の順にログが出ることがある。これをMutexがある状態だと、methodAが終わった後にmethodBが実行される。

methodA 1
methodA 2
methodB 1
methodB 2

startとstopが同時実行されたら困るときとかに利用する。