现在的位置: 首页 > 综合 > 正文

多线程同步

2018年02月09日 ⁄ 综合 ⁄ 共 1181字 ⁄ 字号 评论关闭

我们来一起理一理什么是线程线程与进程的区别、什么是多线程线程同步又是什么、线程同步的方法

 

一、什么是线程?

在多任务环境下,进程与进程间要不断进行切换,而进程是拥有资源与独立调度的基本单位,所以在进程不断切换时其所拥有的资源会浪费处理机时间、空间开销。

为了减少处理机空转时间、切换时间与空间开销我们引入了“线程”,以提高CPU的利用率与并发性

“线程”是处理机进行调度与处理的基本单位,线程除了含有其自身的一些必不可少的资源外基本不占有资源,线程依附于进程而存在,一个进程至少含有一个线程

线程的引入使进程成为只拥有资源的单位,而线程负责调度与分派,线程仅占有少许的资源,所以在进程间切换时可以做到“轻装上阵”,提高并发性与CPU的利用率

二、线程与进程的区别?

     进程是依程序在一数据集合上的一次运行过程

1)地址空间:进程与进程间地址空间是独立的,各进程有自己独立的数据段

同一进程的各线程共享进程的数据部分,各线程拥有自己的堆栈

某进程内的线程对其他进程不可见

2)通信:进程间通信较麻烦,使用(管道、信号、消息队列、共享内存、套接字)实现,线程间数据的共享直接访问进程数据段即可,当然需要一些同步手段来保证数据一致性

3)切换效率:线程间的切换较进程间切换较为高效,速度快

4)进程是程序运行的一次过程,而线程仅是程序的一部分

三、什么是多线程?

多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。

就像人在同一时刻要进行呼吸、走路、说话等是一样的,一个程序里有多个部分,它们彼此独立工作,以便有效利用处理机及用户时间

四、线程同步?

在多线程同步运行的时候,各线程共享进程的数据部分,为了使数据具有一致性,就要使各线程同步进行

五、线程同步的方法?

有四种方法:临界区(criticalSection)、互斥量(mutex)、信号量(Semaphore)、事件(event)

1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。
  2、互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享
  3、信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目
  4、事 件: 通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作

 

【上篇】
【下篇】

抱歉!评论已关闭.