线程的使用会给系统带来上下文切换的额外负担。
当这样的负担超过一定程度时,多线程的特点主要表如今其缺点上,比方用独立的线程来更新数组内每一个元素。
(3)线程的死锁。
即较长时间的等待或资源竞争以及死锁等多线程症状。 (4)对公有变量的同一时候读或写。
当多个线程须要对公有变量进行写操作时,后一个线程往往会改动掉前一个线程存放的数据,从而使前一个线程的參数被改动;另外 ,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这样的错误是程序猿无法预知的
。 六: 三种线程模型 N:1 用户线程模型 1:1 核心线程模型 N:M 混合线程模型
(1)N:1 用户线程模型
"线程实现"建立在"进程控制"机制之上,由用户空间的程序库来管理. OS内核全然不知道线程信息.这些线程称为用户空间线程这些线程工作在"进程竞争范围"
在N:1线程模型中,内核不干涉线程的不论什么生命活动,也不干涉同一进程中的线程环境切换. 在N:1线程模型中,一个进程中的多个线程仅仅能调度到一个CPU,这样的约束限制了可用的并行总量. 第二个缺点是假设某个线程运行了一个"堵塞式"操作(如read),那么,进程中的全部线程都会堵塞,直至那个操作结束.为此,一些线程的实现是为这些堵塞式函数提供包装器,用非堵塞版本号替换这些系统调用,以消除这样的限制.
(2)1:1 核心线程模型 在1:1 核心线程模型中,应用程序创建的每个线程都由一个核心线程直接管理 OS内核将每个核心线程都调用到系统CPU上,因此,全部线程都工作在"系统竞争范围". 这样的线程的创建与调度由内核完毕,由于这样的线程的系统开销比較大(但一般比进程开销小)
(3)N:M 混合线程模型 N:M混合线程模型提供了两级控制,将用户线程映射为系统的可调度以实现并行,这个可调度称为轻量级进程(LWP:light weight process),LWP 再一一映射到核心线程.