Critical Sections with atomic read/write

下面是利用原子读写操作的两种算法

在下面的算法中对数据的读写都是原子的


算法一
两段程序如下:
(1)

while(true){
    while(turn == 2);
    //critical section
    turn = 2;
    //outside of critical section
}

(2)

while(true){
    while(turn == 1);
    //cirtical section
    turn = 1;
    //outside of critical section
}

这个解法存在的问题是:
如果(1)在临界区之外进入了一个无限的循环,然后(2)在一次进入临界区之后,将turn修改为了1,则(2)之后就永远进不了临界区了。


Peterson的算法

while(true){
    ready1 = true;
    turn = 2;
    while(turn == 2 && ready2);
    //critical section
    ready1 = false;
    //outside of critical section
}
while(true) {
    ready2 = true;
    turn = 1;
    while(turn == 1 && ready1);
    //critical section
    ready2 = false;
    //outside of critical section
}

Peterson算法是可行的,也可以扩展到N个线程。(在Wiki中有相关的扩展:filter算法)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容