一、临界区与竞争条件 临界区就是访问和操作共享数据的代码段。 如果两个执行线程有可能处于同一临界区中同时执行,那么我们就称它们为竞争条件(race conditions) 避免并发和防止竞争条件称为同步(synchronization) 二、加锁 2.1 锁的介绍 我们需要一种方法确保一次有且只有一 ...
分类:
其他好文 时间:
2020-02-08 17:12:15
阅读次数:
56
本教程我们学习 Mutex。我们还会学习怎样通过 Mutex 和信道来处理竞态条件(Race Condition)。 临界区 在学习 Mutex 之前,我们需要理解并发编程中临界区(Critical Section)的概念。当程序并发地运行时,多个 Go 协程不应该同时访问那些修改共享资源的代码。这 ...
分类:
其他好文 时间:
2020-02-07 12:36:32
阅读次数:
81
服务器内经常会有一些多读少写的场景, 具体问题需要分析一下, 如果是这种场景, 这边提供一个思路来降低多线程程序锁的冲突, 进而极大的提升程序的性能. 例如一个Dictionary<String, String> A, 需要多读少写, 不会很频繁的写, 而且不会修改Value值, 那么可以构造一个A ...
分类:
编程语言 时间:
2020-01-28 17:27:00
阅读次数:
98
【进程同步】在多进程之间,管理及控制对于共享变量的执行和访问 【竞争条件】多进程同步执行,共享至少一个变量,执行结果取决于不同进程对变量的改变顺序 【临界区】要求使用共享资源或变量的一段码 【临界区问题】多进程用来达成合作的一个协议:互斥(同一时间,只有一个进程执行临界区的码);进展通知(一个进程离 ...
分类:
系统相关 时间:
2020-01-22 16:43:24
阅读次数:
135
1. 原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作。常用原子操作函数举例:atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0atomic_read(atomic_t *v); //返回原子变量的值void atomic_inc(atomic_ ...
分类:
其他好文 时间:
2020-01-15 21:33:40
阅读次数:
72
一、临界区 1.定义:临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待,有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共用资源是被互斥获得使用。 2.临界区中存在的属 ...
分类:
其他好文 时间:
2020-01-14 23:32:02
阅读次数:
133
实现原理 synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性 Java中每一个对象都可以作为锁,这是synchronized实现同步的基础: 普通同步方法,锁是当前实例对象 静态同步方法,锁是当前类的class对象 同步 ...
分类:
其他好文 时间:
2019-12-31 10:58:20
阅读次数:
86
锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。锁是解决并发冲突的重要工具。在开发中我们会用到很多类型的锁,每种锁都有其自身的特点和适用范围。需要深刻理解锁的理念和区别,才能正确、合理地使用锁。常用锁类型乐观锁与悲观锁悲观锁对并发冲突持悲观态度,先取锁后访问数据,能够较大程度确保数据安全性。而乐观锁认为数据冲突的概率比较低,可以尽
分类:
编程语言 时间:
2019-12-27 22:08:08
阅读次数:
182
原子性问题的源头是线程切换,如果能够禁用线程切换那不就能解决这个问题了吗?而操作系统做线程切换是依赖 CPU 中断的,所以禁止 CPU 发生中断就能够禁止线程切换。 在早期单核 CPU 时代,这个方案的确是可行的,而且也有很多应用案例,但是并不适合多核场景。这里我们以 32 位 CPU 上执行 lo ...
分类:
其他好文 时间:
2019-12-27 10:02:54
阅读次数:
100
静态链接库和动态链接库的区别 一个进程可以通过调用waitpid函数来等待它的子进程终止或者停止 Debug和Release的区别 临界区互斥量信号量事件进程互斥与同步 进程有哪几种状态,状态转换图,及导致转换的事件 进程由运行态进入就绪态和阻塞态的原因 进程切换 进程调度算法 死锁 哲学家就餐问题 ...
分类:
编程语言 时间:
2019-12-24 09:46:17
阅读次数:
111