go同步锁 sync mutex

goroutine

http://127.0.0.1:3999/concurrency/11

go tour 到此 就结束了.

继续 学习 可以 从 以下网站

文档

https://golang.org/doc/

https://golang.org/doc/code

https://golang.org/doc/codewalk/functions/

博客

https://go.dev/blog/

wiki 服务器教程

服务器 教程 入口
https://golang.org/doc/articles/wiki/

https://github.com/gin-gonic/gin

官网

https://golang.org/

sync.mutex Lock


package main

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

// SafeCounter is safe to use concurrently.
type SafeCounter struct {
	mu sync.Mutex
	v  map[string]int
}

// Inc increments the counter for the given key.
func (c *SafeCounter) Inc(key string) {
	c.mu.Lock()
	// Lock so only one goroutine at a time can access the map c.v.
	c.v[key]++
	c.mu.Unlock()
}

// Value returns the current value of the counter for the given key.
func (c *SafeCounter) Value(key string) int {
	c.mu.Lock()
	// Lock so only one goroutine at a time can access the map c.v.
	defer c.mu.Unlock()
	return c.v[key]
}

func main() {
	c := SafeCounter{v: make(map[string]int)}
	for i := 0; i < 1000; i++ {
		go c.Inc("somekey")
	}

	time.Sleep(time.Second)
	fmt.Println(c.Value("somekey"))
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
`.Mutex` 是 Go 语言标准库 `sync` 包中的一种同步原语,用于实现互斥锁(Mutex)。互斥锁是一种常用的并发控制机制,用于保护临界区代码,在同一时间只允许一个线程或 goroutine 进入临界区执行。 `sync.Mutex` 是一个结构体类型,它包含了互斥锁的状态和相关的方法。通过使用互斥锁,可以确保在同一时间只有一个 goroutine 能够获取锁,并执行被保护的临界区代码。 下面是一个使用 `sync.Mutex` 的简单示例: ```go package main import ( "fmt" "sync" ) var counter int var mutex sync.Mutex func increment() { mutex.Lock() // 获取互斥锁 defer mutex.Unlock() // 在函数退出时释放互斥锁 counter++ } func main() { var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func() { defer wg.Done() increment() }() } wg.Wait() fmt.Println("Final counter value:", counter) } ``` 在上面的示例中,我们定义了一个全局变量 `counter` 和一个 `sync.Mutex` 类型的变量 `mutex`。在 `increment` 函数中,我们首先通过调用 `mutex.Lock()` 来获取互斥锁,然后执行 `counter++` 以增加计数器的值,最后在函数退出时调用 `mutex.Unlock()` 来释放互斥锁。 在主函数中,我们启动了 10 个 goroutine 来并发地调用 `increment` 函数。通过使用互斥锁,我们确保每次只有一个 goroutine 能够获取互斥锁并执行临界区代码,从而避免了竞态条件(race condition)。 `sync.Mutex` 在并发编程中是一个常用的工具,可以有效地保护共享资源的访问。当多个 goroutine 需要访问同一临界区时,使用互斥锁可以确保线程安全,并避免数据竞争。 希望以上解释对你有帮助!如有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuemake999

请我喝茶呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值