网站下载工具,没有域名能做网站吗,企业怎样选择域名做网站,wordpress 增加作者/// 线程的资源访问冲突#xff1a;多个线程同时申请一个资源#xff0c;造成读写错乱。 /// 解决方案#xff1a;上锁#xff0c;lock{执行的程序段}:同一时刻#xff0c;只允许一个线程访问该程序段。 /// 死锁问题#xff1a; /// 程序中的锁过多#xf… /// 线程的资源访问冲突多个线程同时申请一个资源造成读写错乱。 /// 解决方案上锁lock{执行的程序段}:同一时刻只允许一个线程访问该程序段。 /// 死锁问题 /// 程序中的锁过多某一线程需要多个锁资源而某个资源被另一线程占用另一个线程同样如此谁也不愿先释放资源形成闭环线程无法继续进行。 /// 解决方案使用调度算法让某一个被占用的资源被线程释放或关闭某个线程。 // 资源访问冲突 class State{private Object _lock new Object();private int state 100;private void test(){if(100 state){Console.Write(state state);}state;}private void test2(){if (101 state){Console.Write(state state);}state;}public void ChangeState(){Thread h new Thread(test);Thread v new Thread(test2);// h.Start();// v.Start();// state100state100state101state100请按任意键继续. . .lock (_lock){h.Start();v.Start();// state100请按任意键继续. . .// state100state101请按任意键继续. . .}}}
// 主程序 class StateProgram{static void Main(string[] args){State state new State();for (int i 0; i 10; i){Thread t new Thread(state.ChangeState);t.Start();}Thread.Sleep(1000);}} // 死锁 class Deadlock{Object _lock new Object();Object _lock2 new Object();private int flag 0;public void test(){lock (_lock){Console.WriteLine(我拿到了锁1);lock (_lock2){Console.WriteLine(我拿到了锁2);if(0 flag){Console.WriteLine(我是第一名);flag 1;}else{Console.WriteLine(我是第二名);}}}}public void test2(){lock (_lock2){Console.WriteLine(他拿到了锁2);lock (_lock){Console.WriteLine(他拿到了锁1);if (0 flag){Console.WriteLine(他是第一名);flag 1;}else{Console.WriteLine(他是第二名);}}}}}
// 主程序 Deadlock star new Deadlock();Thread t1 new Thread(star.test);Thread t2 new Thread(star.test2);t1.Start();t2.Start();//我拿到了锁1//他拿到了锁2
// 解决方案1:锁同步 class Deadlock{Object _lock new Object();Object _lock2 new Object();private int flag 0;public void test(){lock (_lock){Console.WriteLine(我拿到了锁1);lock (_lock2){Console.WriteLine(我拿到了锁2);if(0 flag){Console.WriteLine(我是第一名);flag 1;}else{Console.WriteLine(我是第二名);}}}}public void test2(){lock (_lock){Console.WriteLine(他拿到了锁2);lock (_lock2){Console.WriteLine(他拿到了锁1);if (0 flag){Console.WriteLine(他是第一名);flag 1;}else{Console.WriteLine(他是第二名);}}}}}
我拿到了锁1 我拿到了锁2 我是第一名 他拿到了锁2 他拿到了锁1 他是第二名 请按任意键继续. . .
// 解决方案2:做标签 class Deadlock{Object _lock new Object();Object _lock2 new Object();private int flag 0;private int _flag 0;public void test(){if (0 _flag){lock (_lock){Console.WriteLine(我拿到了锁1);lock (_lock2){Console.WriteLine(我拿到了锁2);if (0 flag){Console.WriteLine(我是第一名);flag 1;}else{Console.WriteLine(我是第二名);}}}}_flag 1;}public void test2(){if(1 _flag){lock (_lock2){Console.WriteLine(他拿到了锁2);lock (_lock){Console.WriteLine(他拿到了锁1);if (0 flag){Console.WriteLine(他是第一名);flag 1;}else{Console.WriteLine(他是第二名);}}}}}} Deadlock star new Deadlock();Thread t1 new Thread(star.test);Thread t2 new Thread(star.test2);t1.Start();Thread.Sleep(1000);t2.Start();
我拿到了锁1 我拿到了锁2 我是第一名 他拿到了锁2 他拿到了锁1 他是第二名 请按任意键继续. . .