无锁数据结构设计 之 内存顺序实际表现

这是mhy12345的无锁数据结构教程的第四篇,在详解了C++内存顺序之后,谈谈C++内存顺序在实际运行中的一些影响。

从原理上出发看看C++内存顺序的含义:是由于计算机缓存等内存结构性质导致的线程间单原子变量读写互相不可见的情形。

不过,稍微仔细想想,发现这其实只是一种理论概率上的情形。

首先在考虑内存顺序的误差时,我们先举一个锁的例子——

锁,是为了防止线程之间的资源竞争,

假设一个线程在1%的时间需要独占某一个资源,两个没有加锁的线程产生了竞争导致程序崩溃的概率1%

则,在某一时刻,两个线程同时占有某资源且发生崩溃的概率应为10^{-6}

别看这概率很小,但是我们的程序是若干时点的概念,我们若将时点设为10^6个(这个数应该是有一段程序运行间线程期望切换次数决定的),则发生崩溃的概率为

    \[(1-10^{-6})^{10^6}-1 = 63%\]

因此我们发现,对于线程而言,加锁确实是必不可少的。

不过确实给我们一个提示:为什么我们一定要研究理论上那一丁点的小概率事件呢?假设我告诉你崩溃的概率只有10^-20,那我们还需不需要加锁呢?

我们在开始

 

原创文章地址:【无锁数据结构设计 之 内存顺序实际表现】转载时请注明出处mhy12345.xyz

来自新世界 影评

这是继《1984》《动物庄园》《美丽新世界》之后,我看到的另一部反乌托邦的作品。也是第一部以动画形式观看的同类作品。

总体感受:气势磅礴、构思自然、环环相扣、引人入胜。

这部作品,精彩之处,大概在于其设定设计了从上古社会(即我们现在所处的世界)逐渐发展到的新世界。也就是说,在设定上,已经超出了大部分架空的作品。改朝、换代,这个只在历史书上出现过得词,给人一种极大的沉重感。不论是里面99.8%无能力者对抗对0.2%PK者的“太古社会”,还是由“神之力”所构建的樱花奴隶王朝,最终都在风雨飘摇中飞散……再完美的社会制度,也不过是这样。感慨万千……

这部作品被归类为反乌托邦,也拥有这类作品共同的特点:拥有一个非常强大固执的社会体系,主角在一番奋斗之后,并没有成功改变什么东西。《1984》中,乌托邦由武力暴政维持,民生凋敝,而《美丽新世界》中,虽没有太多提及,但是可以看出社会是建立在一定的科技技术上的;而这部作品,社会所需求的物资,来源于“咒力”。从这里可以总结出一个特点,即乌托邦式社会需要建立在一个非常强大而且自给自足的生产力上(《1984》中那种根本没有消耗的除外)。这确实给正在学习马原的我一些想法,或者说,给我了一些思考的导向性问题。以我现在所了解的资料,从社会主义的分阶段实现,以及马克思思想中社会主义与资本主义的关系中,确实可以看出整个思想体系,都在思考着如何解决这种社会生产力方面的问题。

最重要的是,自新的BGM简直是太配了,甚至即使他是网易云里面听过的最久远的歌,却一点违和感都没有。这也是我觉得这部番最棒的一个部分。

 

原创文章地址:【来自新世界 影评】转载时请注明出处mhy12345.xyz