登录
首页 >  Golang >  Go问答

为何在读写并发时会出现不同结果?

来源:stackoverflow

时间:2024-02-18 22:27:18 252浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《为何在读写并发时会出现不同结果?》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

如果我们将全局变量替换为 true,为什么恐慌会停止发生?

package main

import (
    "time"
)

// If here written false, the panic is expected some times.
// But if we write true here, then panic will never happen.
// Why? 
var value = false

func main() {
    go func() { for { value = true } }()

    time.Sleep(time.Second)

    for {
        if !value {
            panic("FALSE!")
        }
    }
}

解决方案


这是一个竞争条件。在这种情况下,您需要使用WaitGroup。 使用时间睡眠是危险的,因为我们无法预测调度程序如何执行 go 例程。 请参阅以下代码:

func main() {
    var wait sync.WaitGroup
    wait.Add(1);

    go func() {
        for {
            if !value {
                value = true
                wait.Done()
            }
        }
    }()

    wait.Wait()
    //time.Sleep(time.Second)

    for {
        if !value {
            panic("FALSE!")
        }
    }
}

本篇关于《为何在读写并发时会出现不同结果?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>