Penyegerakan adalah penting apabila berbilang urutan (go-rutin dalam Go) perlu mengakses dan mengubah suai memori dikongsi. Mekanisme penyegerakan menghalang keadaan perlumbaan dan ketidakkonsistenan data. Dalam Go, pakej penyegerakan dan atom menawarkan pelbagai primitif penguncian untuk tujuan ini.
RWMutex (mutex baca-tulis) ialah primitif penyegerakan yang mengawal akses kepada perkongsian data. Tidak seperti Mutex standard, RWMutex membenarkan berbilang utas membaca data yang sama serentak sambil mengehadkan akses menulis kepada satu utas pada satu masa.
s.countersLock.RLock(), apabila dipanggil, kunci medan pembilang dalam penerima s. Ini bermakna bahawa urutan lain juga boleh memperoleh kunci baca pada pembilang secara serentak tanpa menyekat.
s.countersLock.RLock() hanya mengunci medan pembilang, meninggalkan medan purata dibuka kunci. Ini membenarkan urutan lain mengakses dan mengubah suai medan purata tanpa gangguan.
RWMutex ialah mekanisme penyegerakan yang biasa digunakan dalam Go. Walaupun saluran mempunyai kekuatannya dalam pengurusan konkurensi, RWMutex sesuai untuk melindungi memori dikongsi apabila berbilang rangkaian perlu membaca dan sekali-sekala menulis pada data yang sama.
atom.AddInt64 ialah operasi atom yang menambah nilai kepada integer secara atom, memastikan bahawa operasi berlaku sebagai satu unit. Ini menghalang keadaan perlumbaan dan rasuah data apabila mengemas kini pembolehubah kongsi.
Dalam contoh ini, kaunter dibuka kunci sebelum operasi penambahan untuk membenarkan urutan lain mengakses dan mengubah suai balas secara serentak. Jika kunci itu ditahan sehingga selepas penambahan, ia akan menyekat benang lain yang cuba menambah pembilang.
Atas ialah kandungan terperinci RWMutex Go: Bilakah Anda Harus Menggunakannya Daripada Primitif Penyegerakan Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!