Windows平台下的多线程编程

如果这个趋势继续,计算能力相对于时间周期将呈指数式的上升,这被称为摩尔定律。

例如:程序中有两个子系统需要并发执行,这时候就需要利用多线程编程。

覆盖的是run()方法,为什么不使用run()启动线程,而使用start()方法?线程对象也是对象,调用线程对象的run()方法就是一个普通的方法调用,并不会创建新的线程。

例如不同线程进行`a++`,则加的是同一个a但是不同的进程进行`a++`,则是不同的a我们使用线程并行计算的时候,我们可以通过把大任务分成小任务来同时计算,比如计算1-5000的累加和,我们可以用一个线程计算1-2500,另一个线程计算2501-5000,最终把两个数字相加来实现这个总任务。

但往往读网络数据和等待用户输入有很多时间处于等待状态,多线程利用这个特点将任务分成多个并发任务后,就可以解决这个问题。

但这并不是主要的用途,因为这种情况通过non-blockingI/O和Unixsignal解决,并且带来更小的副作用。

C++98(1998)标准不承认线程的存在,所以需要调用操作系统的C语言API来实现多线程,比如:POSIX标准中的C标准、MicrosoftWindowsAPI。

在多线程操作系统中,各个系统的实现方式并不相同,在有的系统中实现了用户级线程,有的系统中实现了内核级线程。

线程ID由pthread_creat返回,可以取得⾃⼰的线程ID。

可以用两种方法来创建用户接口线程,MFC提供了两个版本的AfxBeginThread函数,其中一个用于创建用户接口线程。

就绪状态的线程处于就绪队列中,要等待JVM里线程调度器的调度。

***创建一个线程Java提供了两种创建线程方法:*通过实现Runable接口;*通过继承Thread类本身。

thread:线程标识符,即线程ID,标识唯一线程。

负责软件产品概要设计,完成产品功能模块划分和接口设计。

这个时候调用sleep(0),相当告诉操作系统重新来分配时间片,这个时候同优先级的线程就可能分配得时间片,减缓计算线程大量占用时间片。

run()方法是线程启动后要进行回调(callback)的方法。

处理器的数量并不影响程序结构,所以不管处理器个数多少,程序都可以通过线程得以简化。

【优点】实时、关键和通信任务可以运行到完成不会被抢占;程序员控制了系统的操作;强迫程序员按防错方式设计任务,有目的地允许合作;任务执行和反应有可预测性;引入的高优先权任务不能取代已运行的任务;比抢占式规划开销低。

如果一个处理器崩溃,它就不再属于可用处理器之列。

于是就有了一种解决方案:给线程加上一个一致性的标记,线程在操作前先读取并保存这个标记,操作完成后再次读取,检查标记是否被修改,如果是一样的,说明资源访问没有冲突,如果被更改过,说明资源可能在操作时与其他在写的线程冲突,需要重试操作。

用户模式与内核模式运行Windows的计算机中的处理器有两个不同模式:用户模式和内核模式。

有兴趣的话,大家可以在现有线程类的基础上,做进一步的扩展和尝试。

运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。

注意这里的程序在占有一定的处理器时间后并没有运行完毕,可能需要再一次或多次分配处理器时间。

Related Posts

Leave a Reply

We will keep You Updated...
Sign up to receive breaking news
as well as receive other site updates!
Sponsors


Featured Video
Sponsors
Popular Posts
Flickr RSS
Recent Comments
Hi, this is a comment. To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashb
Tag Cloud