@ 一、基本概念 在多线程环境中,有多个线程竞争同一个公共资源,就很容易引发线程安全的问题。因此就需要引入锁的机制,来保证任意时候只有一个线程在访问公共资源。 互斥量就是个类对象,可以理解为一把锁,多个线程尝试用lock()成员函数来加锁,只有一个线程能锁定成功,如果没有锁成功,那么流程将卡在loc ...
分类:
编程语言 时间:
2020-05-31 12:57:50
阅读次数:
73
说到线程安全,不要一下子就想到加锁,尤其是可能会调用频繁或者是要求高性能的场合。 Interlocked: MSDN 描述:为多个线程共享的变量提供原子操作。主要函数如下: Interlocked.Increment 原子操作,递增指定变量的值并存储结果。 Interlocked.Decrement ...
分类:
其他好文 时间:
2020-05-31 11:25:03
阅读次数:
77
1 """ 2 线程锁 3 我这用的是python3.7,必须要加锁才可以保证数据的确定性 4 """ 5 import time 6 from threading import Thread, Lock 7 8 lock = Lock() 9 10 list1 = [0] * 10 11 12 1 ...
分类:
编程语言 时间:
2020-05-31 11:09:57
阅读次数:
68
原子CAS操作 原子操作指令里,有原子加,原子减,cas到底是什么呢? 首先看一段代码, bool compare_and_swap(int *accum, int *dest, int newval) { if (*accum == *dest) { *dest = newval; return ...
分类:
其他好文 时间:
2020-05-29 23:38:08
阅读次数:
104
在上一篇文章《锁的类型以及加锁原理》主要总结了 MySQL 锁的类型和模式以及基本的加锁原理,今天我们就从原理走向实战,分析常见 SQL 语句的加锁场景。了解了这几种场景,相信小伙伴们也能举一反三,灵活地分析真实开发过程中遇到的加锁问题。 ...
分类:
数据库 时间:
2020-05-28 23:55:44
阅读次数:
117
MyISAM 和 InnoDB 存储引擎的对比 锁粒度方面:由于锁粒度不同,InnoDB 比 MyISAM 支持更高的并发; InnoDB 的锁粒度为行锁、MyISAM 的锁粒度为表锁、行锁需要对每一行进行加锁,所以锁的开销更大, 但是能解决脏读和不可重复读的问题,相对来说也更容易发生死锁 可恢复性 ...
分类:
数据库 时间:
2020-05-28 21:44:47
阅读次数:
76
一、将ReentrantLock和synchronized进行比较 1、synchronized和ReentrantLock都是独占锁,不同的是synchronized加锁和解锁过程自动进行;ReentrantLock需手动加锁解锁。 2、synchronized和ReentrantLock都可重入 ...
分类:
其他好文 时间:
2020-05-28 09:16:38
阅读次数:
65
一、MySQL中索引的语法和注意事项 注意事项: 1、索引需要占用磁盘空间,因此在创建索引时要考虑到磁盘空间是否足够 2、创建索引时需要对表加锁,因此实际操作中需要在业务空闲期间进行 创建索引在创建表的时候添加索引 CREATE TABLE test( ID INT NOT NULL, userna ...
分类:
数据库 时间:
2020-05-25 17:35:02
阅读次数:
66
原文出自:https://blog.csdn.net/seesun2012 什么是锁? 在单进程的系统中,当存在多个线程可以同时改变某个变量(可变共享变量)时,就需要对变量或代码块做同步,使其在修改这种变量时能够线性执行消除并发修改变量。 而同步的本质是通过锁来实现的。为了实现多个线程在一个时刻同一 ...
分类:
编程语言 时间:
2020-05-24 16:57:06
阅读次数:
65
关于线程安全一提到可能就是加锁,在面试中也是面试官百问不厌的考察点,往往能看出面试者的基本功和是否对线程安全有自己的思考。 那锁本身是怎么去实现的呢?又有哪些加锁的方式呢? 我今天就简单聊一下乐观锁和悲观锁,他们对应的实现 CAS ,Synchronized,ReentrantLock 正文一个12 ...
分类:
其他好文 时间:
2020-05-24 13:43:50
阅读次数:
224