zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    下载安装Git,学习笔记
    php面试相关整理
    2.5 DQL 分组查询
    2.4 DQL 常见函数
    2.3 DQL 排序查询
    2.2 DQL 条件查询
    2.1 DQL 基础查询
    1.2 MySQL的介绍
    1.1 数据库的相关概念
    2019年JavaEE学习线路
  • 原文地址:https://www.cnblogs.com/brady-wang/p/13150822.html
Copyright © 2011-2022 走看看