• go 加锁


    package main

    import (
    "fmt"
    "math/rand"
    "sync"
    "time"
    )

    var ticket int = 10

    var (
    mutex sync.Mutex
    wg sync.WaitGroup
    )

    func main() {

    wg.Add(4)
    go sell("售票口1")
    go sell("售票口2")
    go sell("售票口3")
    go sell("售票口4")
    wg.Wait()
    }

    func sell(name string) {
    defer wg.Done()
    for {
    mutex.Lock()
    if ticket > 0 {
    rand.Seed(time.Now().Unix())
    time.Sleep(time.Duration(rand.Intn(1000)) * time.Microsecond)
    fmt.Printf("%s 卖出票 %d ", name, ticket)
    ticket--
    } else {
    mutex.Unlock()
    fmt.Printf("%s 票卖完了。。。 ", name)
    break
    }
    mutex.Unlock()
    }
    }

      

    结果

    GOROOT=C:Go #gosetup
    GOPATH=E:wwwgopath #gosetup
    C:Goingo.exe build -o C:UsersradyAppDataLocalTemp\___8go_build_main_go.exe E:/www/go/test/main.go #gosetup
    C:UsersradyAppDataLocalTemp\___8go_build_main_go.exe #gosetup
    售票口1 卖出票 10
    售票口1 卖出票 9
    售票口1 卖出票 8
    售票口4 卖出票 7
    售票口2 卖出票 6
    售票口3 卖出票 5
    售票口1 卖出票 4
    售票口4 卖出票 3
    售票口2 卖出票 2
    售票口3 卖出票 1
    售票口2 票卖完了。。。
    售票口3 票卖完了。。。
    售票口1 票卖完了。。。
    售票口4 票卖完了。。。

    Process finished with exit code 0

  • 相关阅读:
    golang gc
    set password to qcow2
    golang reflect struct
    Mac 自启动管理
    shell exec
    shell 管道 与 mkfifo
    shell 读取文件
    shell 函数
    shell read 命令
    ubuntu 快速安装和设置 mysql
  • 原文地址:https://www.cnblogs.com/brady-wang/p/13150822.html
Copyright © 2020-2023  润新知