zoukankan      html  css  js  c++  java
  • Go之并发处理(售票问题)

    老问题:模拟一个售票窗口进行售票

    先定义类型Ticket(车票)和Conductor(销售员)--偷懒了,把售票和产票都交给Conductor了

    package util
    
    import ()
    
    //--------------------------------
    type Ticket struct {
    	ID    int
    	Price string
    	Type  string
    }
    
    //--------------------------------
    type Conductor struct {
    	Tickets []Ticket
    	Count   int
    }
    
    func NewConductor() *Conductor {
    	return &Conductor{make([]Ticket, 0), 0}
    }
    
    func (this *Conductor) Sell() Ticket {
    
    	temp := this.Tickets[0]
    	this.Tickets = this.Tickets[1:]
    
    	return temp
    
    }
    
    func (this *Conductor) Product() Ticket {
    	ticket := Ticket{this.Count + 1, "$18", "成人票"}
    	this.Count = this.Count + 1
    	this.Tickets = append(this.Tickets, ticket)
    	return ticket
    }
    

     

    func main() {
    	conductor := util.NewConductor()
    
    	ticketCount := 100
    
    	temp := make(chan int, 100)
    
    	wg := new(sync.WaitGroup)
    	wg.Add(ticketCount * 2)
    
    	//一个线程产票,一个线程售票
    	for i := 0; i < ticketCount; i++ {
    
    		go func() {
    			defer wg.Done()
    			<-temp
    			fmt.Println("出售:", conductor.Sell())
    		}()
    	}
    	for i := 0; i < ticketCount; i++ {
    
    		go func() {
    			defer wg.Done()
    			temp <- i
    			fmt.Println("生产:", conductor.Product())
    		}()
    	}
    
    	wg.Wait()
    }
    

      输出结果

    出售: {1 $18 成人票}
    	生产: {2 $18 成人票}
    	出售: {2 $18 成人票}
    	生产: {3 $18 成人票}
    	出售: {3 $18 成人票}
    	生产: {4 $18 成人票}
    	出售: {4 $18 成人票}
    	生产: {5 $18 成人票}
    	出售: {5 $18 成人票}
    	生产: {6 $18 成人票}
    	出售: {6 $18 成人票}
    	生产: {7 $18 成人票}
    	出售: {7 $18 成人票}
    	生产: {8 $18 成人票}
    	出售: {8 $18 成人票}
    	生产: {9 $18 成人票}
    	出售: {9 $18 成人票}
    	生产: {10 $18 成人票}
    	出售: {10 $18 成人票}
    	生产: {11 $18 成人票}
    	出售: {11 $18 成人票}
    	生产: {12 $18 成人票}
    	出售: {12 $18 成人票}
    	生产: {13 $18 成人票}
    	出售: {13 $18 成人票}
    	生产: {14 $18 成人票}
    	出售: {14 $18 成人票}
    	生产: {15 $18 成人票}
    	出售: {15 $18 成人票}
    	生产: {16 $18 成人票}
    	出售: {16 $18 成人票}
    	生产: {17 $18 成人票}
    	出售: {17 $18 成人票}
    	生产: {18 $18 成人票}
    	出售: {18 $18 成人票}
    	生产: {19 $18 成人票}
    	出售: {19 $18 成人票}
    	生产: {20 $18 成人票}
    	出售: {20 $18 成人票}
    	生产: {21 $18 成人票}
    	出售: {21 $18 成人票}
    	生产: {22 $18 成人票}
    	出售: {22 $18 成人票}
    	生产: {23 $18 成人票}
    	出售: {23 $18 成人票}
    	生产: {24 $18 成人票}
    	出售: {24 $18 成人票}
    	生产: {25 $18 成人票}
    	出售: {25 $18 成人票}
    	生产: {26 $18 成人票}
    	生产: {1 $18 成人票}
    	出售: {26 $18 成人票}
    	生产: {27 $18 成人票}
    	生产: {28 $18 成人票}
    	出售: {27 $18 成人票}
    	生产: {29 $18 成人票}
    	生产: {30 $18 成人票}
    	出售: {28 $18 成人票}
    	生产: {31 $18 成人票}
    	生产: {32 $18 成人票}
    	出售: {29 $18 成人票}
    	生产: {33 $18 成人票}
    	生产: {34 $18 成人票}
    	出售: {30 $18 成人票}
    	生产: {35 $18 成人票}
    	出售: {31 $18 成人票}
    	生产: {36 $18 成人票}
    	生产: {37 $18 成人票}
    	出售: {32 $18 成人票}
    	生产: {38 $18 成人票}
    	生产: {39 $18 成人票}
    	出售: {33 $18 成人票}
    	出售: {34 $18 成人票}
    	生产: {40 $18 成人票}
    	生产: {41 $18 成人票}
    	出售: {35 $18 成人票}
    	出售: {36 $18 成人票}
    	生产: {42 $18 成人票}
    	生产: {43 $18 成人票}
    	出售: {37 $18 成人票}
    	出售: {38 $18 成人票}
    	生产: {44 $18 成人票}
    	生产: {45 $18 成人票}
    	出售: {39 $18 成人票}
    	出售: {40 $18 成人票}
    	生产: {46 $18 成人票}
    	生产: {47 $18 成人票}
    	出售: {41 $18 成人票}
    	出售: {42 $18 成人票}
    	生产: {48 $18 成人票}
    	生产: {49 $18 成人票}
    	出售: {43 $18 成人票}
    	出售: {44 $18 成人票}
    	生产: {50 $18 成人票}
    	生产: {51 $18 成人票}
    	出售: {45 $18 成人票}
    	出售: {46 $18 成人票}
    	生产: {52 $18 成人票}
    	生产: {53 $18 成人票}
    	出售: {47 $18 成人票}
    	出售: {48 $18 成人票}
    	生产: {54 $18 成人票}
    	生产: {55 $18 成人票}
    	出售: {49 $18 成人票}
    	出售: {50 $18 成人票}
    	生产: {56 $18 成人票}
    	生产: {57 $18 成人票}
    	出售: {51 $18 成人票}
    	出售: {52 $18 成人票}
    	生产: {58 $18 成人票}
    	生产: {59 $18 成人票}
    	出售: {53 $18 成人票}
    	出售: {54 $18 成人票}
    	生产: {60 $18 成人票}
    	生产: {61 $18 成人票}
    	出售: {55 $18 成人票}
    	出售: {56 $18 成人票}
    	生产: {62 $18 成人票}
    	生产: {63 $18 成人票}
    	出售: {57 $18 成人票}
    	出售: {58 $18 成人票}
    	生产: {64 $18 成人票}
    	生产: {65 $18 成人票}
    	出售: {59 $18 成人票}
    	出售: {60 $18 成人票}
    	生产: {66 $18 成人票}
    	生产: {67 $18 成人票}
    	出售: {61 $18 成人票}
    	出售: {62 $18 成人票}
    	生产: {68 $18 成人票}
    	生产: {69 $18 成人票}
    	出售: {63 $18 成人票}
    	出售: {64 $18 成人票}
    	生产: {70 $18 成人票}
    	生产: {71 $18 成人票}
    	出售: {65 $18 成人票}
    	出售: {66 $18 成人票}
    	生产: {72 $18 成人票}
    	生产: {73 $18 成人票}
    	出售: {67 $18 成人票}
    	出售: {68 $18 成人票}
    	生产: {74 $18 成人票}
    	出售: {69 $18 成人票}
    	出售: {70 $18 成人票}
    	生产: {75 $18 成人票}
    	生产: {76 $18 成人票}
    	出售: {71 $18 成人票}
    	出售: {72 $18 成人票}
    	生产: {77 $18 成人票}
    	生产: {78 $18 成人票}
    	出售: {73 $18 成人票}
    	出售: {74 $18 成人票}
    	生产: {79 $18 成人票}
    	生产: {80 $18 成人票}
    	出售: {75 $18 成人票}
    	出售: {76 $18 成人票}
    	生产: {81 $18 成人票}
    	生产: {82 $18 成人票}
    	出售: {77 $18 成人票}
    	出售: {78 $18 成人票}
    	生产: {83 $18 成人票}
    	生产: {84 $18 成人票}
    	出售: {79 $18 成人票}
    	出售: {80 $18 成人票}
    	生产: {85 $18 成人票}
    	生产: {86 $18 成人票}
    	出售: {81 $18 成人票}
    	出售: {82 $18 成人票}
    	生产: {87 $18 成人票}
    	生产: {88 $18 成人票}
    	出售: {83 $18 成人票}
    	出售: {84 $18 成人票}
    	生产: {89 $18 成人票}
    	生产: {90 $18 成人票}
    	出售: {85 $18 成人票}
    	出售: {86 $18 成人票}
    	生产: {91 $18 成人票}
    	生产: {92 $18 成人票}
    	出售: {87 $18 成人票}
    	出售: {88 $18 成人票}
    	生产: {93 $18 成人票}
    	生产: {94 $18 成人票}
    	出售: {89 $18 成人票}
    	出售: {90 $18 成人票}
    	生产: {95 $18 成人票}
    	生产: {96 $18 成人票}
    	出售: {91 $18 成人票}
    	出售: {92 $18 成人票}
    	生产: {97 $18 成人票}
    	出售: {93 $18 成人票}
    	出售: {94 $18 成人票}
    	出售: {95 $18 成人票}
    	生产: {98 $18 成人票}
    	出售: {96 $18 成人票}
    	生产: {99 $18 成人票}
    	出售: {97 $18 成人票}
    	生产: {100 $18 成人票}
    	出售: {98 $18 成人票}
    	出售: {99 $18 成人票}
    	出售: {100 $18 成人票}
    

      

  • 相关阅读:
    pip备忘录
    Vue.js---------------1引入
    centos安装数据库
    Python之网络编程二
    Python之协议
    Python高级
    jvm-3学习教程
    jvm学习-2
    jvm相关学习
    八种常用的排序算法
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/4867707.html
Copyright © 2011-2022 走看看