Rumah > pembangunan bahagian belakang > Golang > Bila hendak menggunakan sync.Cond vs. Simple Locking: Masalah dengan sync.Cond dan Penyelesaian Alternatif

Bila hendak menggunakan sync.Cond vs. Simple Locking: Masalah dengan sync.Cond dan Penyelesaian Alternatif

Linda Hamilton
Lepaskan: 2024-11-12 00:16:03
asal
1082 orang telah melayarinya

When to Use sync.Cond vs. Simple Locking: A Problem with sync.Cond and an Alternative Solution

Menyelesaikan Masalah Penyegerakan yang salah.Penggunaan Cond

Garis Masalah Awal:

Percubaan untuk menggunakan penyegerakan.Cond menghasilkan keadaan perlumbaan, menyebabkan panik serta-merta kerana kebuntuan. Pembangun mengesyaki isu antara mengunci Mutex dan menggunakan kaedah Tunggu syarat.

Penjelasan Kes Penggunaan Yang Dimaksudkan:

Selain daripada keadaan perlumbaan, matlamat utama adalah untuk mencipta mekanisme penyegerakan di mana berbilang goroutine menunggu pengepala HTTP tersedia daripada muat turun yang lama goroutine.

Penyelesaian:

  • Nilai Semula Keperluan untuk penyegerakan.Cond: Dalam kes ini, penyegerakan mudah.Mutex sudah memadai kerana hanya terdapat seorang penulis (pemuat turun) dan berbilang pembaca (goroutine mengakses pengepala).
  • Contoh dengan Berbilang Pembaca dan Satu Penulis:

    var sharedRsc = make(map[string]interface{})
    func main() {
      var wg sync.WaitGroup
      wg.Add(2)
      m := sync.Mutex{}
      c := sync.NewCond(&m)
      go func() {
          c.L.Lock()
          for len(sharedRsc) == 0 {
              c.Wait()
          }
          fmt.Println(sharedRsc["rsc1"])
          c.L.Unlock()
          wg.Done()
      }()
      go func() {
          c.L.Lock()
          for len(sharedRsc) == 0 {
              c.Wait()
          }
          fmt.Println(sharedRsc["rsc2"])
          c.L.Unlock()
          wg.Done()
      }()
      c.L.Lock()
      sharedRsc["rsc1"] = "foo"
      sharedRsc["rsc2"] = "bar"
      c.Broadcast()
      c.L.Unlock()
      wg.Wait()
    }
    Salin selepas log masuk

Penyelesaian Alternatif:

Jika menggunakan saluran boleh dilaksanakan dalam situasi ini, ia masih merupakan kaedah pilihan untuk menghantar data sekeliling.

Atas ialah kandungan terperinci Bila hendak menggunakan sync.Cond vs. Simple Locking: Masalah dengan sync.Cond dan Penyelesaian Alternatif. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan