zoukankan      html  css  js  c++  java
  • [Go] golang互斥锁mutex

    1.互斥锁用于在代码上创建一个临界区,保证同一时间只有一个goroutine可以执行这个临界区代码
    2.Lock()和Unlock()定义临界区

    package main
    
    import (
    	"fmt"
    	"runtime"
    	"sync"
    )
    
    var (
    	//全局变量
    	counter int64
    	//计数信号量
    	wg sync.WaitGroup
    	//mutex定义一段代码临界区
    	mutex sync.Mutex
    )
    
    func main() {
    	fmt.Println("hello")
    	//计数加2,等待两个goroutine
    	wg.Add(2)
    	go incCounter()
    	go incCounter()
    	//主goroutine等待子goroutine结束
    	wg.Wait()
    	fmt.Println("最终counter值:", counter)
    }
    
    //增加counter的值函数
    func incCounter() {
    	//函数结束,减小信号量
    	defer wg.Done()
    	for count := 0; count < 2; count++ {
    		//创建这个临界区
    		//同一时刻只允许一个goroutine进入
    		mutex.Lock()
    		//使用大括号只是为了让临界区看起来更清晰,并不是必须的
    		{
    			value := counter
    			//强制调度器切换
    			runtime.Gosched()
    			value++
    			counter = value
    		}
    		mutex.Unlock()
    	}
    }
    

      

  • 相关阅读:
    一些想说的事
    化学离子平衡作业偷懒神器
    solution
    SGU 刷题记
    INT128
    # 字典树的指针写法 1.
    CSP-S2 游记
    Tarjan 【整理】
    HGOI 20191106
    20191101
  • 原文地址:https://www.cnblogs.com/taoshihan/p/10387009.html
Copyright © 2011-2022 走看看