public void Refresh(DeadLock deadlock)
        {
            List <DeadLockItem> deadLockItems     = deadlock.Items;
            TreeNodeCollection  deadLockItemNodes = r_deadlockNode.Nodes;

            int countNew = deadLockItems.Count;
            int countOld = deadLockItemNodes.Count;
            int to       = countNew;

            if (countNew < countOld)
            {
                for (int i = countNew; i < countOld; ++i)
                {
                    r_deadLockItemNodes[countNew].Remove();
                    r_deadLockItemNodes.RemoveAt(countNew);
                }
            }
            else if (countOld < countNew)
            {
                to = countOld;
                for (int i = 0; i < (countNew - countOld); ++i)
                {
                    DeadLockItemNode deadLockItemNode = new DeadLockItemNode(r_manager, r_deadlockNode, deadLockItems[countOld + i]);
                    r_deadLockItemNodes.Add(deadLockItemNode);
                }
            }

            for (int i = 0; i < to; ++i)
            {
                r_deadLockItemNodes[i].Refresh(deadLockItems[i]);
            }
        }
Example #2
0
        public void Refresh(DeadLock deadlock)
        {
            List<DeadLockItem> deadLockItems = deadlock.Items;
            TreeNodeCollection deadLockItemNodes = r_deadlockNode.Nodes;

            int countNew = deadLockItems.Count;
            int countOld = deadLockItemNodes.Count;
            int to = countNew;

            if (countNew < countOld)
            {
                for (int i = countNew; i < countOld; ++i)
                {
                    r_deadLockItemNodes[countNew].Remove();
                    r_deadLockItemNodes.RemoveAt(countNew);
                }
            }
            else if (countOld < countNew)
            {
                to = countOld;
                for (int i = 0; i < (countNew - countOld); ++i)
                {
                    DeadLockItemNode deadLockItemNode = new DeadLockItemNode(r_manager, r_deadlockNode, deadLockItems[countOld + i]);
                    r_deadLockItemNodes.Add(deadLockItemNode);
                }
            }

            for (int i = 0; i < to; ++i)
            {
                r_deadLockItemNodes[i].Refresh(deadLockItems[i]);
            }
        }
Example #3
0
        static void TryDeadLock()
        {
            DeadLock dead = new DeadLock();
            var      t1   = new Thread(() => dead.F1());
            var      t2   = new Thread(() => dead.F2());

            t1.Name = "T1";
            t2.Name = "T2";
            t1.Start();
            t2.Start();
        }
        public static void ThreadSafeAccess()
        {
            DeadLock deadLock = new DeadLock();

            lock (deadLock)
            {
                Thread thread = new Thread(deadLock.Method1);
                thread.Start();

                // Do some time consuming task here
            }

            int num = 0;

            if (Monitor.TryEnter(MonitorMethodAccess.SyncRoot, 250))
            {
                MonitorMethodAccess.ModifyNumericField(10);
                num = MonitorMethodAccess.ReadNumericField();
                Monitor.Exit(MonitorMethodAccess.SyncRoot);
            }
            Console.WriteLine(num);
        }
Example #5
0
        /// <summary>
        /// Vai para o promixo passo se possivel
        /// </summary>
        /// <param name="sender">object</param>
        /// <param name="e">event</param>
        private void BtnProximoPasso_Click(object sender, EventArgs e)
        {
            try
            {
                Parametros.QtdLinha  = decimal.Parse(numeroDeLinha);
                Parametros.QtdColuna = decimal.Parse(numeroDeColuna);
                if (Parametros == null)
                {
                    throw new Exception("O estado não é seguro e os processos foram finalizados!");
                }

                var objDeadLock = new DeadLock(Parametros);
                Parametros = objDeadLock.Execute();

                if (Parametros == null)
                {
                    throw new Exception("Erro - DeadLock - A quantidade necessaria para a execução do processo é maior que a quantidade disponivel!");
                }

                MessageBox.Show(objDeadLock.DescricaoExecucao,
                                Program.TitleProgram, MessageBoxButtons.OK, MessageBoxIcon.Information);
                PopuleGrids();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message,
                                Program.TitleProgram,
                                MessageBoxButtons.OK,
                                ex.Message.Contains("DeadLock")
                                    ?MessageBoxIcon.Error
                                    :MessageBoxIcon.Warning);
                btnProximoPasso.Visible = false;
                btnIniciar.Visible      = true;
                btnLimpar.Visible       = true;
                btnGerarVetorDAutomaticamente.Visible = true;
                BloqueiGrids();
            }
        }
        public void Multithreading_DeadLockExample_Should_Result_InDeadLock()
        {
            var m = new DeadLock();

            m.DeadlockExample();
        }