• 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

  • 相关阅读:
    Python-内置数据结构listdictset
    Python-内置结构listsetdicttuple
    Python-内置数据结构
    Python-函数作用域和集合列表字典元祖
    Python-函数参数和文档
    Python-while循环+函数
    Python-分支循环
    Python基础
    五、Jmeter-数据库数据进行参数化
    mysql索引:四种类型,两种方法
  • 原文地址:https://www.cnblogs.com/php-linux/p/13150822.html
Copyright © 2020-2023  润新知