Go语言中怎么用Mutex保障数据读写正确性

62次阅读
没有评论

共计 893 个字符,预计需要花费 3 分钟才能阅读完成。

在 Go 语言中,可以使用 sync 包中的 Mutex 类型来保障数据的读写正确性。Mutex是互斥锁的意思,它提供了两个方法 LockUnlock,分别用于加锁和解锁。下面是一个示例代码,演示了如何使用 Mutex 来保障数据读写的正确性:

package main

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

type Counter struct {
	mu    sync.Mutex
	count int
}

func (c *Counter) Increment() {c.mu.Lock()
	defer c.mu.Unlock()
	c.count++
}

func (c *Counter) Read() int {c.mu.Lock()
	defer c.mu.Unlock()
	return c.count
}

func main() {counter := Counter{}
	wg := sync.WaitGroup{}

	// 启动多个 goroutine 并发地对计数器进行增加操作
	for i := 0; i < 100; i++ {wg.Add(1)
		go func() {defer wg.Done()
			counter.Increment()}()}

	wg.Wait()

	// 读取计数器的值
	fmt.Println(counter.Read())
}

在上面的代码中,Counter类型包含了一个 sync.Mutex 类型的字段 mu 用于保护 count 字段的读写操作。Increment方法用于对 count 进行增加操作,而 Read 方法用于读取 count 的值。

IncrementRead方法中,首先使用 c.mu.Lock() 来加锁,然后在方法体结束时使用 c.mu.Unlock() 来解锁。这样就保证了在代码块中只有一个 goroutine 可以访问 count 字段,从而保障了数据的读写正确性。

main 函数中,启动了 100 个并发的 goroutine 对计数器进行增加操作,最后再读取计数器的值。由于使用了 Mutex 进行加锁和解锁,所以在多个 goroutine 并发地对计数器进行增加操作时,不会出现数据竞争的问题。最后输出的计数器的值为 100,表示数据读写的正确性得到了保障。

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2024-03-21发表,共计893字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)