锁是操作系统中实现进程同步的重要机制。 基本概念 临界区(Critical Section)是指对共享数据进行访问与操作的代码区域。所谓共享数据,就是可能有多个代码执行流并发地执行,并在执行中可能会同时访问的数据。 同步(Synchronization)是指让两个或多个进程/线程能够按照程序员期望的 ...
分类:
其他好文 时间:
2019-04-09 18:46:13
阅读次数:
645
程序员需要留意保护共享资源,防止共享资源禀赋访问,如果多个执行线程同时访问和操作数据,有可能发生各现场之间相互覆盖共享数据的情况,造成被访问数据处于不一致的状态。 Linux内核是抢占式内核,意味着调度程序可以在任何时刻抢占正在运行的内核代码,重新调度其他的进程执行。 9.1 临界区竞争条件 所谓临 ...
分类:
其他好文 时间:
2019-03-19 01:40:15
阅读次数:
212
背景 进程间的交互关系 临界区(critical section)的访问过程 需要满足原则: 如何实现进程间的互斥 轮流 申请 算法一: 算法二: 算法三 信号量 实现进程间互斥 用进程实现同步: 哲学家问题 信号量 经典问题 哲学家问题 解决办法: 解决办法: 生产者-消费者问题 读者-写者问题 ...
分类:
系统相关 时间:
2019-03-03 19:03:41
阅读次数:
215
类CCriticalSection的对象表示一个“临界区”,它是一个用于同步的对象,同一时刻只允许一个线程存取资源或代码区。临界区在控制一次只有一个线程修改数据或其它的控制资源时非常有用。例如,在链表中增加一个结点就只允许一次一个线程进行。通过使用CCriticalSection对象来控制链表,就可 ...
分类:
其他好文 时间:
2019-03-02 14:47:40
阅读次数:
154
一、条件变量的引入 std::condition_variable 解决了死锁并且控制的资源的访问顺序二避免不必要的等待。当互斥操作不够用而引入的。比如,线程可能需要等待某个条件为真才能继续执行,而一个忙等待循环中可能会导致所有其他线程都无法进入临界区使得条件为真时,就会发生死锁。所以,condit ...
分类:
编程语言 时间:
2019-03-01 18:45:06
阅读次数:
226
钩子函数 功能: 扩展任务功能,被其他任务调用 算是消息机制 1、OSIdleTaskHook(),空闲任务调用这个函数,可以用来让CPU进入低功耗模式 2、OSInitHook(), 系统初始化函数OSInit()调用此函数。 3、OSStatTaskHook(),统计任务每秒中都会调用这个函数, ...
分类:
其他好文 时间:
2019-02-28 21:22:56
阅读次数:
281
1. ThreadLocal的简介 在多线程编程中通常解决线程安全的问题我们会利用synchronzed或者lock控制线程对临界区资源的同步顺序从而解决线程安全的问题,但是这种加锁的方式会让未获取到锁的线程进行阻塞等待,很显然这种方式的时间效率并不是很好。线程安全问题的核心在于多个线程会对同一个临 ...
分类:
其他好文 时间:
2019-02-08 20:10:36
阅读次数:
181
重入锁 重入锁指的是当前线成功获取锁后,如果再次访问该临界区,则不会对自己产生互斥行为。 Java中对ReentrantLock和synchronized都是可重入锁,synchronized由jvm实现可重入即使,ReentrantLock都可重入性基于AQS实现。 ReentrantLock还提 ...
分类:
其他好文 时间:
2019-02-01 12:22:20
阅读次数:
210
synchronized是基于Monitor来实现同步的。 Monitor 的工作机理: 线程进入同步方法中。 为了继续执行临界区代码,线程必须获取 Monitor 锁。如果获取锁成功,将成为该监视者对象的拥有者。任一时刻内,监视者对象只属于一个活动线程(The Owner) 拥有监视者对象的线程可... ...
分类:
其他好文 时间:
2019-01-28 01:21:00
阅读次数:
188
重要的并发编程概念:竞态条件、临界区、互斥量;互斥锁:注意事项和建议,死锁,示例代码;读写锁:读写锁规则,示例代码
分类:
其他好文 时间:
2019-01-24 22:59:00
阅读次数:
194