b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

createmutex_releasemutex_createmux释放资源

电脑杂谈  发布时间:2017-01-26 10:07:02  来源:网络整理

线程:线程是进程的独立执行单元,每一个进程都有一个主线程,除了主线程可以包含其他的线程。

多线程的意义:多线程有助于改善程序的总体响应性,提高CPU的效率。releasemutex

多线程的应用程序域是相当不稳定的,因为多个线程在同一时间内都能运行共享的功能模块。为了保护应用程序的资源不被破坏,为多线程程序提供了三种加锁的机制,分别是:Monitor类、Lock关键字和Mutex类。releasemutex

1. lock

lock实现的功能是:使后进入的线程不会中断当前的线程,而是等待当前线程结束后再继续执行。

应用:

注意:避免锁定 public 类型,否则实例将超出代码的控制范围。

常见的结构 lock (this)、lock (typeof (MyType)) 和 lock ("myLock")

违反此准则:如果实例可以被公共访问,将出现 lock (this) 问题。

如果 MyType 可以被公共访问,将出现 lock (typeof (MyType)) 问题。

由于进程中使用同一字符串的任何其他代码将共享同一个锁,所以出现 lock(“myLock”) 问题。

最佳做法是定义 private 对象来锁定, 或 private static 对象变量来保护所有实例所共有的数据。

下面举例说明lock的应用:

下面的例子中创建了5个次线程,次线程完成的任务就是:输出线程编码,延迟1秒,然后输出当时的时间

Example:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

namespace ConsoleApplication5 {

class Program {

static void Main(string[] args) {

Console.WriteLine ("程序开始时间:"+DateTime.Now .ToString());

Example ex=new Example ();

Thread []threads=new Thread[5];

for (int i=0;i<5;i++)

{

threads[i]=new Thread (new ThreadStart(ex.OutPut));

threads[i].Name =string.Format ("Worker thread#{0}",i) ;

}

foreach(Thread t in threads){

t.Start();

}

Console.WriteLine("主线程最后一句代码!"+DateTime.Now.ToString());

}

}

class Example{

private static object thisLock=new object ();

public void OutPut()

{

lock(thisLock){

Console .WriteLine("->{0}",Thread.CurrentThread.Name);

Thread.Sleep(1000);

Console.WriteLine(DateTime.Now);

}

}

}

}

实验结果如下:

图1:加lock

图2:没有lock

从实验结果可以看出,加lock后,程序每次只能执行一个线程,只有当前线程执行完了,才会执行下一个线程未加lock,程序执行混乱,容易阻塞。

2. Monitor


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28794-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 孙楠
      孙楠

      马云自己就靠炒股发财

    热点图片
    拼命载入中...