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]); } }
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]); } }
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); }
/// <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(); }