我们知道Redis的所有操作都是原子操作,无论是Get还是ISMEMBER、Set等操作,全部都可以放心使用,其内部保证了操作的原子性,Redis中最底层中基本原子操作的封装,其实并不麻烦,反而相当简洁,这部分代码位于atomicvar.h中。

总共就是这三个,事实上他们都是宏:

image.png
1553919915556723.png

原子增、原子减、原子取,值得注意的是这三个操作的返回值都不应该本接收,其返回值的情况是未定义的,后面会看到不接受其返回值是因为Redis封装了三种原子操作,有些封装下这三个宏函数根本没有返回值,所以正确用法如下(例如获取一个减后的值):

image.png
1553920657187522.png


封装了以下三种原子操作:

__atomic

image.png
1553920815525491.png

__sync

image.png
1553920934894707.png

linux下的那组原子操作宏

mutex < p style=“text-indent: 2em; text-align: justify;">最后如果以上两种在机器上都未定义的话,我们采用最原始pthread库中的mutex ![image.png][1] [1]: /wp-content/uploads/image/20190330/1553921080358311.png “1553921080358311.png”