Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah penutupan saluran golang juga akan memaksa penyegerakan goroutine?

Adakah penutupan saluran golang juga akan memaksa penyegerakan goroutine?

WBOY
WBOYke hadapan
2024-02-09 20:15:31435semak imbas

关闭 golang 通道是否也会强制 goroutine 同步?

Editor PHP Xigua berada di sini untuk menjawab soalan tentang saluran golang: Adakah penutupan saluran golang juga memaksa penyegerakan goroutine? Biasanya, menutup saluran tidak memaksa goroutine untuk menyegerak, tetapi menutup saluran mencetuskan operasi baca pada saluran untuk mengembalikan nilai sifar dan nilai boolean. Jika terdapat data yang belum dibaca dalam saluran, operasi baca akan mengembalikan data dan benar jika tiada data yang belum dibaca dalam saluran, operasi baca akan mengembalikan sifar dan palsu. Oleh itu, selepas menutup saluran, anda boleh menilai sama ada semua data dalam saluran telah dibaca dengan membaca saluran.

Kandungan soalan

Seperti yang dinyatakan dalam buku "Go Programming Language" (halaman 226):

Communication over an unbuffered channel causes the sending and receiving goroutines to synchronize. Because of this, unbuffered channels are sometimes called synchronous channels. When a value is sent on an unbuffered channel, the receipt of the value happens before the reawakening of the sending goroutine.

Adakah perkara yang sama berlaku jika saluran ditutup? Maksud saya, adakah penerimaan menutup saluran sentiasa berlaku sebelum goroutine yang baru menutupnya bangun semula?

Saya masih ingat membaca sesuatu yang berkaitan dengan itu. Saya mencari dalam buku tetapi tidak menemuinya.

Penyelesaian

Menutup saluran tidak memaksa goroutine untuk menyegerak seperti menghantar pada saluran yang tidak dibuffer.

Go Memory ModelSpesifikasi mengatakan:

Panggilan goroutine close() tidak akan menghalang menunggu goroutine lain menerima nilai sifar.

Seorang Goroutine menghantar nilai ke blok saluran yang tidak dibuffer sehingga Goroutine lain menerima nilai tersebut.

Atas ialah kandungan terperinci Adakah penutupan saluran golang juga akan memaksa penyegerakan goroutine?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Artikel sebelumnya:Susun pakej golang dalam yoctoArtikel seterusnya:Susun pakej golang dalam yocto