Beispiel #1
0
        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( );
            }
        }
Beispiel #2
0
            /// <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( );
                        }
                    }
                }
            }