Chinaunix首页 | 论坛 | 博客
  • 博客访问: 964671
  • 博文数量: 335
  • 博客积分: 10287
  • 博客等级: 上将
  • 技术积分: 3300
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-08 15:29
文章分类

全部博文(335)

文章存档

2015年(4)

2014年(15)

2013年(17)

2012年(11)

2011年(12)

2010年(96)

2009年(27)

2008年(34)

2007年(43)

2006年(39)

2005年(37)

我的朋友

分类: C/C++

2009-02-27 16:26:43

会很自然地问,为什么C++没有提供,答案是因为效率、控制以及C++适用的应用程序的范围。让我们逐一分析。

由于没有内建对多线程的支持,因此C++没有尝试定义一种“万能的”解决方案。相反,C++允许您直接使用操作系统提供的多线程特性。这种方法意味着您的程序可以使用执行环境支持的、最高效的方法来实现多线程。由于许多的多任务环境提供了对多线程丰富的支持,因此能够访问这些支持对于创建高性能的多线程程序至关重要。

使用操作系统的函数来支持多线程使得可以全面地使用执行环境提供的控制。考虑Windows环境。它提供了多组线程相关函数来有条理地控制线程的创建和管理。例如,Windows有多种方法来控制对共享资源的访问,共享资源包括信号、互斥体、事件对象、可等待定时器以及临界区。由于操作系统能力的不同,很难将这种灵活性设计到一门语言中。因此,对于多线程语言层次的支持通常意味着仅提供特性的“最小公倍数”。通过C++,您可以访问操作系统提供的所有特性。当编写高性能的代码时,这是非常重要的优点。

C++是为所有类型的程序设计类型设计的,从嵌入式系统(在执行环境中没有操作系统)到高度分布的、基于GUI的终端用户应用程序以及介于二者之间的一切程序。因此,C++不能够对它的执行环境加入明显的限制。内建的对多线程的支持将会从根本上将C++限制在那些支持多线程的环境中,从而阻止了在不使用线程的环境中开发软件时使用C++。

在最后的分析中,没有内建的对多线程的支持是C++的一个主要优点,因为这样可以使用对目标执行环境最高效的方式编写程序。记住,C++的功能无处不在。多线程的情况很明显是一种“简单就好”的情况。

多线程在.NET里如何工作?

在本质上和结构来说,.NET是一个多线程的环境。有两种主要的多线程方法是.NET所提倡的:使用ThreadStart来开始你自己的进程,直接的(使用ThreadPool.QueueUserWorkItem)或者间接的(比如Stream.BeginRead,或者调用BeginInvoke)使用ThreadPool类。一般来说,你可以"手动"为长时间运行的任务创建一个新的线程,另外对于短时间运行的任务尤其是经常需要开始的那些,进程池是一个非常好的选择。进程池可以同时运行多个任务,还可以使用框架类。对于资源紧缺需要进行同步的情况来说,它可以限制某一时刻只允许一个线程访问资源。这种情况可以视为给线程实现了锁机制。线程的基类是System.Threading。所有线程通过CLI来进行管理。

阅读(720) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~