看题目: 第一种解法采用绝对悲观锁保证绝对的线程安全,思路很简单:不考虑线程协作写代码,然后找出单线程环境下存在控制依赖与数据依赖且涉及共享变量的部分,保证其原子性后确定互斥关系,决定那些操作是互斥的,则共用一把锁。 class H2O { int hNums=0; int oNums=0; pub ...
分类:
其他好文 时间:
2020-03-09 01:24:01
阅读次数:
65
转自 https://www.cnblogs.com/hustzzl/p/9343797.html 1. Java锁的种类 在笔者面试过程时,经常会被问到各种各样的锁,如乐观锁、读写锁等等,非常繁多,在此做一个总结。介绍的内容如下: 乐观锁/悲观锁 独享锁/共享锁 互斥锁/读写锁 可重入锁 公平锁/ ...
分类:
编程语言 时间:
2020-03-06 12:52:14
阅读次数:
76
Effective Go (实效 Go 编程) 引言 Go 是一门全新的语言。尽管它从既有的语言中借鉴了许多理念,但其与众不同的特性, 使得使用 Go 编程在本质上就不同于其它语言。将现有的 C++ 或 Java 程序直译为 Go 程序并不能令人满意——毕竟 Java 程序是用 Java 编写的,而 ...
分类:
其他好文 时间:
2020-03-05 22:24:32
阅读次数:
86
这是经典的同步互斥问题, 遵循原则: 1、条件变量需要锁的保护;2、锁需要条件变量成立后,后重新上锁; 参考代码: //notify_one()(随机唤醒一个等待的线程) //notify_all()(唤醒所有等待的线程) //Create By@herongwei 2019/09/10 #incl ...
分类:
编程语言 时间:
2020-03-05 13:23:52
阅读次数:
87
分布式锁 一、要求 当我们在设计分布式锁的时候,我们应该考虑分布式锁至少要满足的一些条件,同时考虑如何高效的设计分布式锁,这里我认为以下几点是必须要考虑的。 1、互斥 在分布式高并发的条件下,我们最需要保证,同一时刻只能有一个线程获得锁,这是最基本的一点。 2、防止死锁 在分布式高并发的条件下,比如 ...
分类:
其他好文 时间:
2020-03-04 19:03:33
阅读次数:
54
如题,使用条件变量Cond和channel通道实现多个生产者和消费者模型。Go语言天生带有C语言的基因,很多东西和C与很像,但是用起来 绝对比C语言方便。今天用Go语言来实现下多消费者和生产者模型。如果对C语言的多生产者和消费者模型感兴趣的可以看Linux系统编程:使用mutex互斥锁和条件变量实现 ...
分类:
编程语言 时间:
2020-03-04 13:03:16
阅读次数:
116
1 定义 进程:进程是程序处理机上的一次执行过程, 它是一个动态的概念,它是系统进行资源分配和调度的一个独立单位。 线程:进程的一个实体,是CPU运行调度的基本单位,它是比进程更小的能独立运行的基本单位。线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈), ...
分类:
编程语言 时间:
2020-03-03 10:31:30
阅读次数:
104
介绍 golang 中的 sync 包实现了两种锁: Mutex:互斥锁 RWMutex:读写锁,RWMutex 基于 Mutex 实现 Mutex(互斥锁) Mutex 为互斥锁,Lock() 加锁,Unlock() 解锁 在一个 goroutine 获得 Mutex 后,其他 goroutine ...
分类:
其他好文 时间:
2020-03-02 17:34:58
阅读次数:
67
说起synchronized相信大家都很熟悉,就这个东西叫做互斥锁,平时呢可以帮助我们实现譬如线程安全的问题。那么今天咱们就来深入底层,好好的谈一下synchronized的原理和应用 一.谈一下对于synchronized的了解 synchronized关键字解决的是多个线程之间访问资源的同步性, ...
分类:
其他好文 时间:
2020-03-02 16:24:36
阅读次数:
131
死锁现象 第一种 加了2次同样的锁 只存在于互斥锁 第2种 2个进程都想获取对方的锁 却不可能实现 可重复锁RLock 可重复锁,是线程相关的锁不管实列化多少次都是同一只把锁, 引用计数 ,只要计数不为0,其他线程不可以抢. 可以解决死锁现象 信号量Semaphore 本质就是一个计数器,用来为多个 ...
分类:
其他好文 时间:
2020-03-01 10:55:57
阅读次数:
108