登录
首页 >  Golang >  Go问答

在 golang 中如何使用互斥锁来保护特定的值或标识符

来源:stackoverflow

时间:2024-02-25 14:06:24 484浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《在 golang 中如何使用互斥锁来保护特定的值或标识符》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

我想在更新余额时避免任何竞争情况。下面是示例代码

type BalanceHandler struct {
  repo      Repository
  provider  Provider
}

func(h *BalanceHandler) AddToBalance(userID int64, amount int64){
  user := h.repo.GetUser(userID)

  bal := h.provider.GetBalance(user.Email())
  newBalance := bal + amount
  h.provider.UpdateBalance(user.Email(), newBalance)
}

我想知道是否有一种方法专门为 userid 创建互斥体,以便允许不同的用户并发访问,但对于同一个 userid ,访问应该同步


正确答案


解决方案取决于代码中不明显的几个因素。

如果 repo.GetUser 对于相同的 userID 返回相同的 user 实例,并且该用户是指向用户结构体的指针,那么您可以向该用户添加一个互斥体,在获取它后锁定它,并在获取它时解锁它。你已经完成了。

另一个选择是拥有一个共享的 map[string]struct{} 对象,并记录锁定的用户 ID。您需要一个互斥锁来保护该映射。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>