对应课程:南京大学并发算法与理论

试图像追番一样学习

不过时间有限,就做个简短的笔记好了

0 绪论

并发存在交织性,例如以下程序虽能编译,但会断言错误:

#include <thread>
#include <assert.h>

int x = 0;

void foo() {
    while (true) {
        x = 1;
        x = 0;
        assert(x == 0);
    }
}

int main() {
    std::thread t(foo);
    std::thread t2(foo);

    t.join();
    t2.join();
}
// g++ ./main.cpp -lpthread -o main.o

1 JMM

Java Memory Model (JMM)

1-1 SC 模型

Sequential Consistency (SC) Model,顺序存储模型

这种与顺序存储模型不符的 reordering 优化在 Java 或其它编译器中存在

1-2 DRF 程序

Data-Race-Freedom (DRF),无数据竞争:读写冲突/写写冲突

DRF 程序就不用担心受 reordering 优化影响。 因此编译器也可以大肆优化:

1-3 Happens-Before

操作A happens before 操作B,就是要求 操作A 对于 操作B 可见,且本质上应先于操作B 执行。譬如:

i = 1; // 操作A
j = i; // 操作B

则如果 A hb B,则 j=1;若没有声明 hb,就不能保证这个结果。

不过,即便声明 hb,也并不一定要顺序执行,只要保证结果上一致即可。

这课好像纯 Java 啊目前