Pengecualian Bersama Goroutine Serentak dengan Kunci Mutex
Dalam kod anda, anda ingin memastikan bahagian kod tertentu dalam setiap goroutine dilaksanakan secara berasingan . Ini menghalang pelaksanaan serentak bahagian ini oleh goroutine lain. Begini cara pengecualian bersama boleh dicapai menggunakan kunci mutex:
Garis kod yang disediakan menunjukkan aliran goroutin dan keperluan untuk pengecualian bersama. Anda ingin menghalang pelaksanaan daripada berpindah ke goroutine lain semasa acara tertentu sedang dilaksanakan dalam satu goroutine.
Untuk melaksanakan ini, kunci mutex boleh digunakan. Mutex memastikan bahawa hanya satu goroutine boleh mengakses sumber yang dikongsi pada bila-bila masa. Berikut ialah versi kod anda yang diubah suai sedikit yang menggunakan mutex untuk pengecualian bersama:
<code class="go">package main import ( "fmt" "rand" "sync" ) var ( mutex1, mutex2, mutex3 sync.Mutex wg sync.WaitGroup ) func Routine1() { mutex1.Lock() // Do something for i := 0; i < 200; i++ { mutex2.Lock() mutex3.Lock() fmt.Println("Value of z") mutex2.Unlock() mutex3.Unlock() } // Do something mutex1.Unlock() wg.Done() } func Routine2() { mutex2.Lock() // Do something for i := 0; i < 200; i++ { mutex1.Lock() mutex3.Lock() fmt.Println("Value of z") mutex1.Unlock() mutex3.Unlock() } // Do something mutex2.Unlock() wg.Done() } func Routine3() { mutex3.Lock() // Do something for i := 0; i < 200; i++ { mutex1.Lock() mutex2.Lock() fmt.Println("Value of z") mutex1.Unlock() mutex2.Unlock() } // Do something mutex3.Unlock() wg.Done() } func main() { wg.Add(3) go Routine1() go Routine2() Routine3() wg.Wait() }</code>
Begini cara kod yang dikemas kini ini mencapai pengecualian bersama:
Pelaksanaan ini memastikan bahagian kod yang ditentukan dalam setiap goroutine dilaksanakan secara berasingan, menghalang pelaksanaan serentak daripada goroutine lain.
Atas ialah kandungan terperinci Bagaimanakah Kunci Mutex boleh digunakan untuk mencapai Pengecualian Bersama dalam Goroutine Serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!