发布时间:2024-11-22 01:55:16
因此,为了确保数据的安全性和一致性,需要通过各种机制来限制对临界区的访问。
因此,使用临界区可以有效地避免以上问题,确保程序的正确性和可靠性。
以下是使用互斥锁实现临界区的示例代码:
```go package main import ( "sync" "fmt" ) var ( counter int mutex sync.Mutex ) func increment() { mutex.Lock() counter++ mutex.Unlock() } func main() { var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func() { increment() wg.Done() }() } wg.Wait() fmt.Println("Counter:", counter) } ```在上述示例中,我们首先创建了一个全局变量`counter`来充当共享资源。然后,我们定义了一个互斥锁`mutex`,通过`sync.Mutex`来创建。在`increment`函数中,我们通过调用`mutex.Lock()`和`mutex.Unlock()`来锁定和解锁临界区,以确保对共享资源的访问是互斥的。
最后,在`main`函数中,我们启动了10个并发的协程来调用`increment`函数,每个协程都会递增`counter`的值。由于有临界区的存在,所有的递增操作都是安全的,并且最终输出的结果是正确的。