Gunakan fungsi sync.Mutex dalam golang untuk melaksanakan kod selamat serentak

WBOY
Lepaskan: 2023-11-18 13:01:02
asal
539 orang telah melayarinya

Gunakan fungsi sync.Mutex dalam golang untuk melaksanakan kod selamat serentak

Gunakan fungsi penyegerakan.Mutex dalam golang untuk melaksanakan kod selamat serentak

Dalam pengaturcaraan serentak, apabila berbilang goroutine mengakses pembolehubah dikongsi pada masa yang sama, keadaan perlumbaan data mungkin berlaku. Untuk memastikan ketekalan dan ketepatan data, kami boleh menggunakan kunci mutex (Mutex) untuk melaksanakan kod selamat serentak.

Golang menyediakan pakej penyegerakan, yang mengandungi jenis Mutex Melalui kaedah Mutex's Lock() dan Unlock(), kita boleh mengunci dan membuka kunci sebelum dan selepas akses kepada sumber kongsi yang perlu dilindungi.

Di bawah kami menggunakan contoh kod ringkas untuk menunjukkan cara menggunakan penyegerakan.Mutex untuk melaksanakan kod selamat serentak.

package main

import (
    "fmt"
    "sync"
    "time"
)

var (
    count int
    mutex sync.Mutex
)

func main() {
    var wg sync.WaitGroup
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go increment(&wg)
    }
    wg.Wait()

    fmt.Println("Final count:", count)
}

func increment(wg *sync.WaitGroup) {
    mutex.Lock()
    defer mutex.Unlock()

    time.Sleep(time.Millisecond) // 模拟一些耗时操作

    count++
    wg.Done()
}
Salin selepas log masuk

Dalam kod di atas, kami mentakrifkan kiraan pembolehubah global dan mutex kunci mutex. 10 goroutine dicipta dalam fungsi utama, dan setiap goroutine memanggil fungsi kenaikan.

Dalam fungsi kenaikan, mula-mula panggil mutex.Lock() untuk mendapatkan kunci mutex, dan kemudian lakukan beberapa operasi pada sumber kongsi yang perlu dilindungi Di sini kami mensimulasikan operasi yang memakan masa untuk meningkatkan kerumitan kod. dan akhirnya panggil mutex Unlock() untuk melepaskan kunci mutex.

Apabila bilangan goroutine bertambah, operasi mengikut kiraan akan menjadi sumber dikongsi untuk akses serentak. Dengan menggunakan kunci mutex, kami memastikan bahawa hanya satu goroutine boleh mengakses dan mengubah suai pembolehubah kiraan pada masa yang sama, dengan itu mengelakkan persaingan data.

Akhir sekali, tunggu sehingga semua goroutine dilaksanakan melalui penyegerakan.WaitGroup, dan kemudian keluarkan nilai kiraan akhir.

Melalui kunci mutex, kami mencapai akses selamat serentak untuk mengira, memastikan ketekalan dan ketepatan operasi.

Perlu diingatkan bahawa kunci mutex harus digunakan dengan berhati-hati. Penggunaan mutex yang berlebihan akan mengurangkan prestasi selari dan dengan mudah menimbulkan kebuntuan dan masalah lain. Apabila menulis program serentak, anda harus meminimumkan akses kepada pembolehubah yang dikongsi dan menggunakan primitif serentak yang lebih ringan seperti operasi atom atau saluran untuk mengelakkan penggunaan mutex yang berlebihan.

Ringkasnya, menggunakan fungsi penyegerakan.Mutex dalam golang boleh mencapai kod selamat serentak. Dengan mengunci operasi baca dan tulis sumber yang dikongsi, kami memastikan ketekalan dan ketepatan akses data antara goroutine yang berbeza. Walau bagaimanapun, dalam aplikasi sebenar, kita harus menggunakan kunci dengan berhati-hati mengikut situasi tertentu untuk mengelakkan masalah seperti kemerosotan prestasi dan kebuntuan.

Atas ialah kandungan terperinci Gunakan fungsi sync.Mutex dalam golang untuk melaksanakan kod selamat serentak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!