-
http://jingyan.baidu.com/article/8275fc86ad1c5e46a03cf6e9.html
理解多线程,我们通常理解的应用程序就是一个*.exe文件,当运行*.exe应用程序以后,系统会在内存中为该程序分配一定的空间,同时加载一些该程序所需的资源,其实这就可以称为创建了一个进程。而线程则只是进程中的一个基本执行单元。进程会包含一个进入此入口的线程,我们称之为主线程main。然当在程序处理一个很耗时的任务,如输出一个大的文件或远程访问数据库等,此时的窗体界面程序对用户而言基本像是没反应一样,菜单、按钮等都用不了。因为窗体上控件的响应事件也是需要主线程来执行的,而主线程正忙着干其他的事,控件响应事件就只能排队等着主线程忙完了再执行。为了克服单线程的这个缺陷,Win32 API可以让主线程再创建其他的次线程,但不论是主线程还是次线程都是进程中独立的执行单元,可以同时访问共享的数据,这样就有了多线程这个概念。 -
-
-
补充概念(前台线程与后台线程)。前台线程能阻止应用程序的终止,既直到所有前台线程终止后才会彻底关闭应用程序。而对后台线程而言,当所有前台线程终止时,后台线程会被自动终止,不论后台线程是否正在执行任务。默认情况下通过Thread.Start()方法创建的线程都自动为前台线程,把线程的属性IsBackground设为true时就将线程转为后台线程。
-
多线程难点(并发问题演示)如果只看上面,多线程实在是太简单啦,多个线程无非就是多new几次而已,但是这里面有个问题,就是如果线程访问同一个资源,如网络订票,一个客户买了票,另一个客户再买的话,按道理说应该不能买啦,但是线程是独立运行的,两个线程互不干扰,怎么让另一个线程知道自己访问资源已经被修改了,这就涉及到线程同步的问题啦,同时各种熟悉的概念死锁,并发也来啦。修改程序代码如图所示。因为设置的是随机等待时间,所以运行结果不同。
-
线程同步,线程同步也成为阻塞调用,即没有执行完任务不返回,线程被挂起。可以使用C#中的lock关键字,在此关键字范围类的代码都将是线程安全的。lock关键字需定义一个标记,线程进入锁定范围是必须获得这个标记。当锁定的是一个实例级对象的私有方法时使用方法本身所在对象的引用就可以了。修改代码如下,运行结果如图所示
初探多线程(C#)
发布于 2014-08-07 156 次阅读
Comments NOTHING