public void SingleThread_MultipleAcquireRelease( ) { using (var mutex = new NamedMutex("Global\\TestMutex", null)) { Assert.IsNotNull(mutex, "The mutex should not be null"); bool isAcquired = mutex.Acquire(0); Assert.IsTrue(isAcquired, "The mutex should be acquired"); mutex.Release( ); isAcquired = mutex.Acquire(0); Assert.IsTrue(isAcquired, "The mutex should be acquired"); isAcquired = mutex.Acquire(0); Assert.IsTrue(isAcquired, "The mutex should be acquired"); mutex.Release( ); isAcquired = mutex.Acquire(0); Assert.IsTrue(isAcquired, "The mutex should be acquired"); isAcquired = mutex.Acquire(0); Assert.IsTrue(isAcquired, "The mutex should be acquired"); mutex.Release( ); } }
/// <summary> /// Thread proc method /// </summary> private void ThreadProc( ) { _startEvent.WaitOne( ); bool finished = false; while (!finished) { using (var mutex = new NamedMutex("TestMutex")) { if (mutex.Acquire( )) { if (_sharedObjectsList.Count == 0) { finished = true; } else { // Get the first object from the list SharedObject so = _sharedObjectsList[0]; // If it belongs to this thread task it and remove it from the list if (so.OwnerThread == Thread.CurrentThread.Name) { _localObjectsDictionary[so.Id] = so; _sharedObjectsList.RemoveAt(0); } } } if (!_autoRelease) { mutex.Release( ); } } } }