先聊下redis普通的分布式锁,用 1.单节点、主从/哨兵模式的分布式锁,安全吗? 或许你了解过,通过如下方式加锁: 设置锁时,使用set命令,因为其包含了setnx,expire的功能,起到了原子操作的效果,给key设置随机值,并且只有在key不存在时才设置成功返回True,并且设置key的过期时 ...
分类:
其他好文 时间:
2020-03-29 17:46:22
阅读次数:
79
金属Rust:原子操作 对于复杂的操作来说,使用互斥量(Mutex)来避免竞态条件相当省力。但是对于一些比较小规模的操作,比如让一个计数器+1之类,会考虑更方便的原子对象。 原子类型在标准库中的 模块下。原子类型和平时使用的基础类型(primitive type)很像,唯一的区别是原子类型的操作能够 ...
分类:
其他好文 时间:
2020-03-29 12:34:28
阅读次数:
125
引子 考虑如下的简单程序,全局变量x初始值为0: 程序输出 1 2 或 2 2很容易理解,但也有可能输出为1 1。 Why? 原因便是x++不是原子操作,如果把它转为CPU指令形式,则很容易理解: (1) Load x (2) Inc x (3) Store x 当第一个线程运行完第一步时,第二个线 ...
分类:
其他好文 时间:
2020-03-28 16:15:58
阅读次数:
146
MySQL 中,单个 Store Procedure(SP) 不是原子操作,而 Oracle 则是原子的。如下的存储过程,即使语句2 失败,语句 1 仍然会被 commit 到数据库中: create table testproc(id int(4) primary key, name varcha ...
分类:
数据库 时间:
2020-03-27 00:45:22
阅读次数:
77
1. 加锁的原理- 原子操作、中断、test and set 参考:https://blog.csdn.net/qq_35181209/article/details/78026636 TSL-自旋锁的机制分析:https://blog.csdn.net/u011240016/article/det ...
分类:
其他好文 时间:
2020-03-23 15:09:44
阅读次数:
111
原文:C# lock 语法糖实现原理--《.NET Core 底层入门》之自旋锁,互斥锁,混合锁,读写锁 在多线程环境中,多个线程可能会同时访问同一个资源,为了避免访问发生冲突,可以根据访问的复杂程度采取不同的措施 原子操作适用于简单的单个操作,无锁算法适用于相对简单的一连串操作,而线程锁适用于复杂... ...
1. 文件描述符 一个非负整数,当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。 每个文件打开时会在内核中建立一个文件表项,这个文件表项包括文件的状态信息、存储文件内容的缓冲区、当前文件的读写位置等,这些文件表项保存在内核的一个数组(文件表)里。 每个进程在内核中有一个整形数组, ...
分类:
系统相关 时间:
2020-03-10 14:28:36
阅读次数:
72
一.事物隔离级别 读未提交(read uncommitted)是指,一个事务还没提交时,它做的变更就能被别的事务看到.通俗理解,别人改数据的事务尚未提交,我在我的事务中也能读到。 读提交(read committed)是指,一个事务提交之后,它做的变更才会被其他事务看到。通俗理解,别人改数据的事务已 ...
分类:
数据库 时间:
2020-03-08 17:58:07
阅读次数:
96
并发与并行 并发:同一时间段执行多个任务并行:同一时刻执行多个任务Go语言的并发通过goroutine实现。goroutine类似于线程,属于用户态的线程,我们可以根据需要创建成千上万个goroutine并发工作。goroutine是由Go语言的运行时调度完成,而线程是由操作系统调度完成。Go语言还 ...
分类:
编程语言 时间:
2020-03-02 19:00:07
阅读次数:
69
1. fork系统调用 pid_t fork(); 该函数的每次调用都返回两次,在父进程中返回子进程的PID,在子进程中则返回0. 该返回值是后续代码判断当前进程是父进程还是子进程的依据。fork调用失败时返回-1,并设置errno。 fork函数复制当前进程,在内核进程表中创建一个新的进程表项。新 ...
分类:
系统相关 时间:
2020-03-01 17:09:20
阅读次数:
99