
课程咨询: 400-996-5531
投诉建议: 400-111-8989
认真做教育 专心促就业
线程是我们在学习计算机编程开发技术的时候需要重点掌握的一个编程概念,而本文我们就通过案例分析来简单了解一下,计算机线程的同步和互斥分享。
基本概念
概述:现在操作系统基本都是多任务的操作系统,同时有大量可以调度的实体在运行。在多任务操作系统当中,同时运行的多个任务可能:
都需要访问/使用同一种资源
多个任务之间有依赖关系,某个任务的运行依赖于另一个任务
同步和互斥就是用来解决上述两个问题的。
同步和互斥的概念:
互斥是要求两个任务不能同时占用资源,会相互排序,必须等待一个线程运行完毕,另外一个线程才能过来使用资源。
同步是一种更为复杂的互斥,在互斥的基础上,要求两个任务的执行存在先后顺序。
其他相关概念:
临界资源:多线程执行流共享的资源就叫做临界资源
临界区:每个线程内部,访问临界资源的代码,就叫做临界区
原子性:不会被任何调度机制打断的操作,该操作只有两态(无中间态,即使被打断,也不会受影响),要么完成,要么未完成
互斥量mutex
概念:多个线程对一个共享变量进行操控时,会引发数据不一致的问题。此时就引入了互斥量(也叫互斥锁)的概念,来保证共享数据操作的完整性。在被加锁的任一时刻,临界区的代码只能被一个线程访问。
互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只有两种状态,即加锁(lock)和解锁(unlock)。
代码的要求:
代码必须要有互斥行为:当代码进入临界区执行时,不允许其他线程进入该临界区。
如果多个线程同时要求执行临界区的代码,并且临界区没有线程在执行,那么只能允许一个线程进入该临界区。
如果线程不在临界区中执行,那么该线程不能阻止其他线程进入临界区。
互斥量的接口
互斥量其实就是一把锁,是一个类型为pthread_mutex_t的变量,使用前需要进行初始化操作,使用完之后需要对锁资源进行释放。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。