Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Gunakan fungsi sync.Mutex dalam golang untuk melaksanakan kod selamat serentak

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

WBOY
WBOYasal
2023-11-18 13:01:02553semak imbas

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()
}

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!

Kenyataan:
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