Rumah > pembangunan bahagian belakang > Golang > Mengapa Nilai Goroutine Saya Tidak Kelihatan kepada Orang Lain?

Mengapa Nilai Goroutine Saya Tidak Kelihatan kepada Orang Lain?

Linda Hamilton
Lepaskan: 2024-10-29 11:37:30
asal
782 orang telah melayarinya

Why Is My Goroutine's Value Not Visible to Others?

Adakah ini kerana pengkompil go mengoptimumkan kod?

Isunya bukanlah pengoptimuman oleh pengkompil Go, sebaliknya kekurangan penyegerakan. Tugasan kepada i tidak diikuti oleh sebarang peristiwa penyegerakan, jadi ia tidak dijamin untuk diperhatikan oleh mana-mana goroutine lain. Malah, pengkompil yang agresif mungkin memadamkan keseluruhan penyataan i.

Model Memori Go

Model memori Go menentukan keadaan di mana pembacaan pembolehubah dalam satu goroutine boleh dijamin untuk memerhati nilai yang dihasilkan dengan menulis kepada pembolehubah yang sama dalam goroutine yang berbeza.

Untuk menyerikan akses, lindungi data dengan operasi saluran atau primitif penyegerakan lain seperti yang terdapat dalam penyegerakan dan penyegerakan/pakej atom .

Jika anda mesti membaca seluruh dokumen ini untuk memahami tingkah laku program anda, anda terlalu bijak. Jangan pandai.

Penyegerakan

Dalam contoh berikut, tugasan kepada a tidak diikuti oleh sebarang peristiwa penyegerakan, jadi ia tidak dijamin untuk dipatuhi oleh mana-mana goroutine lain. Malah, pengkompil yang agresif mungkin memadamkan keseluruhan pernyataan go.

<code class="go">var a string

func hello() {
  go func() { a = "hello" }()
  print(a)
}</code>
Salin selepas log masuk

Contoh berikut menunjukkan cara mensiri akses kepada i menggunakan penyegerakan.Mutex.

<code class="go">package main

import (
    "sync"
    "time"
)

func main() {
    mx := new(sync.Mutex)
    i := 1
    go func() {
        for {
            mx.Lock()
            i++
            mx.Unlock()
        }
    }()
    <-time.After(1 * time.Second)
    mx.Lock()
    println(i)
    mx.Unlock()
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Nilai Goroutine Saya Tidak Kelihatan kepada Orang Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan