示例#1
0
        public Philosopher(int number, IForkExchange conn)
        {
            string writerMutexName = "WrMutex";
            string tableMutexName  = "TableMutex";

            _connection = conn;
            _forksState = ForksState.Empty;
            Number      = number;
            Mutex.TryOpenExisting(tableMutexName, out _tableMutex);
            if (_tableMutex == null)
            {
                _tableMutex = new Mutex(false, tableMutexName);
            }
            Mutex.TryOpenExisting(writerMutexName, out _writerMutex);
            if (_writerMutex == null)
            {
                _writerMutex = new Mutex(false, writerMutexName);
            }
            _timerStep            = new Timer();
            _timerHealth          = new Timer();
            _timerStep.Elapsed   += Step;
            _timerHealth.Elapsed += Death;
            _tableMutex.WaitOne();
            GetLeftForkIndex(Number, out _leftForkIndex, Table);
            _tableMutex.ReleaseMutex();
        }
        public Cafe(int number, IForkExchange conn)
        {
            _connection = conn;
            TableC      = new Table(number);
            _connection.Send(TableC);
            string tableMutexName = "TableMutex";

            Mutex.TryOpenExisting(tableMutexName, out _tableMutex);
            if (_tableMutex == null)
            {
                _tableMutex = new Mutex(false, tableMutexName);
            }
        }