登录
首页 >  Golang >  Go问答

我们如何在 Go 中使用通道来代替互斥锁?

来源:Golang技术栈

时间:2023-03-30 14:44:49 386浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《我们如何在 Go 中使用通道来代替互斥锁?》,这篇文章主要会讲到golang等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

通道结合了通信——值的交换——同步——保证两个计算(goroutines)处于已知状态。

如何使用 Google Go 中的通道来执行互斥锁的功能?

package main

import "sync"

var global int = 0
var m sync.Mutex

func thread1(){
    m.Lock()
    global = 1
    m.Unlock()
}

func thread2(){
    m.Lock()
    global = 2
    m.Unlock()
}

func main(){
   go thread1()
   go thread2()
}

正确答案

使用 Channel 作为 Mutex 的示例:

package main

var global int = 0
var c = make(chan int, 1)

func thread1(){
    

您也可以使用chan struct{}代替chan int来减少内存大小。进入它的值是struct{}{}(类型struct{}和空内容{})。有关示例,请参见[Ivan black 的评论。](http://localhost:8080/questions/3952061/how-can-we-use-channels-in-go- in-place-of-mutex/3953027#comment94999147_3953027)

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《我们如何在 Go 中使用通道来代替互斥锁?》文章吧,也可关注golang学习网公众号了解相关技术文章。

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