线程的同步与实现

线程同步的方式:

1)临界区:通过对多线程的串行化来访问公共资源或者一段代码,速度快,适合控制数据访问

2)互斥量:只有用户互斥对象的线程才可以访问公共资源。互斥不仅仅能够实现统一应用程序的公共资源安全共享,还可以实现不同应用的公共资源的安全共享。

3)信号量:它允许同一时刻多个线程访问同一资源,但是需要控制同一时刻访问该资源的数量。

4)事件(信号):用来通知线程一些事情已经发生,从而启动后继任务的其实保持多线程同步,也可以实现多线程优先级的比较操作。

线程的实现方式

根据操作系统内核是否对线程课感知,可以将线程分为:用户线程与内核线程。

内核线程建立和销毁都是由操作系统来负责。操作系统在参考各个进程内是否有运行的或者就绪队列的线程,决定是否停止对该线程的调度。

用户线程,用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,用户进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。用户线程是不能被操作系统所感知的。

用户线程的优点:

1)可以在不支持线程的操作系统中实现

2)创建和销毁线程,线程切换的代价=线程管理的代价<<内核线程

3)允许每个进程定制自己的调度算法,线程管理比较灵活

4)线程能够利用的表空间与堆栈空间比内核级线程多。

用户线程的缺点:

1)同一个进程只能同时一个线程在运行,如果有一个线程使用了系统调用而阻塞,那么整个进程都会被挂起。

2)页面失效也会引起整个进程被挂起。

原文地址:https://www.cnblogs.com/topass123/p/12751930.html