How to create Own Semaphore?


 class CustomSemaphore
    {
        private Mutex[] arrMutex;

        // place holder to store thread to mutex mapping
        private Thread[] arrthread;

        // number of threads allowed to access the resources
        private int threadLimit;

        // contructor creates the mutexes
        public CustomSemaphore(int threadLimit)
        {
            this.threadLimit = threadLimit;
            arrMutex = new Mutex[this.threadLimit];
            arrthread = new Thread[this.threadLimit];
            for (int i = 0; i < this.threadLimit; i++)
            {
                arrMutex[i] = new Mutex();
                arrthread[i] = null;
            }
        }
        public int Wait()
        {
            int index = WaitHandle.WaitAny(arrMutex);
            if (index != WaitHandle.WaitTimeout)
                arrthread[index] = Thread.CurrentThread;
            return index;
        }
        public void Release()
        {
            for (int i = 0; i < threadLimit; i++)
            {
                if (arrthread[i] == Thread.CurrentThread)
                {
                    arrMutex[i].ReleaseMutex();
                    break;
                }
            }
        }
    }

Comments

Popular posts from this blog

Pagination of DataGrid in WPF using MVVM

Connect SQL Server Database to WPF Application and Perform CRUD Operations

Filter DataGrid and ListView in wpf using ICollectionView