【问题标题】:How can I make every routines a global variable for each routine?如何使每个例程成为每个例程的全局变量?
【发布时间】:2021-07-30 10:04:55
【问题描述】:

我在计划运行的每个例程中都有很多函数,但在我将其重构为多个线程之前,它使用全局变量将消息发送回。 在我重建它之后,例程编写了相同的变量,这会导致恐慌。

那么,我该如何解决这个问题呢?有没有办法为每个例程创建一个唯一的全局变量?

【问题讨论】:

    标签: go thread-safety goroutine


    【解决方案1】:

    不要使用全局(包级别)变量。如果必须,请使用适当的同步。

    但正如 Go 的谚语所说:

    不要通过共享内存进行通信;相反,通过通信共享内存。

    使用渠道来传达结果,这在设计上可以安全地并发使用。

    如果所有 goroutine 都应该有状态,则将描述状态的变量分组到一个结构中,并将该结构的值传递给每个 goroutine,或者让它们创建自己的。

    查看相关:How to make a variable thread-safe

    【讨论】:

    • 谢谢,重建antlr4-runtime的代价太高了。我会尝试使用频道发送消息。非常感谢!
    猜你喜欢
    • 2021-05-21
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多