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

先定义类型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 成人票}

  

Go之并发处理(售票问题)的更多相关文章

  1. C# Entity Framework并发处理

    原网站:C# Entity Framework并发处理 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NE ...

  2. JAVA多线程售票问题

    //定义一个类实现Runnable接口,定义一个需要同步的售票方法,然后重写run方法调用售票的sale方法 class SaleTicket implements Runnable{ private ...

  3. WCF 的 Service Instance模式和并发处理

    WCF 的 Service Instance(实例)有三种模式 PerCall:每一次调用都创建一个实例,每一次调用结束后回收实例.此模式完全无状态. PerSession:调用者打开Channel时 ...

  4. COGS247. 售票系统[线段树 RMQ]

    247. 售票系统 ★★☆   输入文件:railway.in   输出文件:railway.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 某次列车途经C个城市,城市 ...

  5. Android线程之并发处理

    上一篇为大家介绍了关于Looper的简单知识,本篇我们介绍一下多线程的并发处理,我们知道Handler通过sendMessage()发送的消息,首先发送给了Looper,存入Looper的消息栈,之后 ...

  6. java 22 - 11 多线程之模拟电影院售票口售票

    使用多线程实现的第二种方式: 首先创建自定义类 public class SellTicket implements Runnable { // 定义100张票 private int ticket ...

  7. 三、基础功能模块,用户类别管理——锁、EF并发处理、领域服务、应用服务的划分

    在上一章节中,我们处理了MVC多级目录问题,参见<二.处理MVC多级目录问题——以ABP为基础架构的一个中等规模的OA开发日志>.从这章开始,我们将进入正式的开发过程.首先,我们要完成系统 ...

  8. python_way day10 python和其他语言的作用域 、 python2.7多继承和3.5多继承的区别 、 socket 和 socketserver源码(支持并发处理socket,多进程,多线程)

    python_way day10 1.python的作用域和其他语言的作用域 2.python2.7多继承和3.5多继承的区别 3.socket和socketserver源码(并发处理socket) ...

  9. 事务并发处理: DB+ORM+逻辑代码

    在学习了马士兵有关事务并发处理的视频后, 感觉对事务并发处理的概念,问题以及解决方式有了一定的了解,赶紧记录下来以备后用. 1. 事务:一系列操作要么都完成,要么一个都不完成 2. 事务并发:多个事务 ...

随机推荐

  1. RavenDb学习(二)简单的增删查改

    在上一节当中已经介绍了RavenDb的文档设计模式,这一节我们要具体讲一讲如何使用api去访问RavenDb .连接RavenDb var documentStore = new DocumentSt ...

  2. Hive Tuning(五) 标准调优清单

    Hive的标准调优清单,我们可以对照着来做我们的查询优化!

  3. 【C】——利用sigsuspend函数等待信号阻塞进程

    #include<signal.h> int sigsuspend(const sigset_t *sigmask); 返回值:-,并将errno设置为EINTR 将进程的信号屏蔽字设置为 ...

  4. 【oneday_onepage】——Tastes differ!

    You know Ian and Felton can be really boring sometimes. They're always arguing, like. like children. ...

  5. What is "found.000" ? How to deal with it?

    最近在ubuntu系统中发现双系统的win盘中有一些文件夹,名字是“found.000”,甚是疑惑,遂查而记之. found.000文件夹里面的一些后缀名为CHK的文件是你在使用“磁盘碎片整理程序”整 ...

  6. python numpy的transpose函数用法

    #MXNET的N*C*H*W在numpy打印时比较直观#mxnet卷积层# 输入数据格式是:batch * inchannel * height * width# 输出数据格式是:batch * ou ...

  7. 【4】JVM-GC设计思路分析

    Java中将内存的控制交给JVM来实现,方便了JAVA程序猿,当然牺牲了一部分效率,不过总体来看是值得的.那么JVM中是如何设计GC的呢,本文从几个问题入手,然后分析了一下设计思路,如果有理解错误的地 ...

  8. python 调用pymysql模块遇到\转义问题解决办法

    1.问题情况 本来存入mysql的是字典,有汉字,由于python版本是2.7,所以在json的时候把我的值变成了unicode,那么在调用pymysql的时候,mysql给我转义取消了. 存之前: ...

  9. javaweb-Excel导入导出后台代码

    前言: 导入导出后台java代码写好很久了,但是...但是...前台不会写啊. 先把后台代码帖上吧 1.excelToDb package util; /** * 代码解释:此方法将传入一个URL,即 ...

  10. 使用Photoshop实现雪花飘落的效果

    一.准备工作 软件环境:PhotoshopCS5 实验目的:雪花飘落的效果 二.实验步骤 1,打开素材图片并将原图层复制 2,在菜单栏内选择:滤镜->像素化->点状化,单元格大小选6  提 ...