多终端售票(多线程与多进程)
来源:互联网 发布:ubuntu 查看开机启动 编辑:程序博客网 时间:2024/05/10 05:59
售票站大都至少有两个以上的窗口来供应票。每张票上都有一个序号,序号按售出的先后从小到大标号。那么,每个窗口系统在售票时怎么准确的知道下一张即将出售的票号、有无剩余票......这便要引入多线程了。
假设现在有两个窗口,即分别由thread_one和thread_two来控制售票
#test_thread2.py#-*- coding: utf-8 -*-import time,threadingtickts=1000tickt_code=1000lock=threading.Lock()def sales_tick():global tickts,tickt_codetickts=tickts-1tickt_code=tickt_code+1print('Your tickt(%s)! (%s)'%(tickt_code,threading.current_thread().name))def run_thread():while True: #循环次数够多导致某个线程被中断,从而容易导致tickts被改乱lock.acquire() #因此当某个线程开始执行sales_tick时,给它上一把锁,其它线程不能接近global ticktsif tickts==0:lock.release() #票销售完breaktry:sales_tick()finally:lock.release()t1=threading.Thread(target=run_thread,name='thread_one')t2=threading.Thread(target=run_thread,name='thread_two')t1.start()t2.start()t1.join()t2.join()print('No tickt')
输出:
Your tickt(1001)! (thread_one)
Your tickt(1002)! (thread_one)
Your tickt(1003)! (thread_one)
Your tickt(1004)! (thread_one)
......
Your tickt(1035)! (thread_two)
Your tickt(1036)! (thread_two)
Your tickt(1037)! (thread_two)
Your tickt(1038)! (thread_two)
......
......
Your tickt(1201)! (thread_one)
Your tickt(1202)! (thread_one)
Your tickt(1203)! (thread_one)
Your tickt(1204)! (thread_one)
看得出是两个窗口互相交替执行
由于CPU执行速度非常之快,两个线程互相争抢CPU,速度都是在毫秒级甚至更短,人无法感知,所以人们会以为这两者是在同时执行,实际上并不是。这种行为术语称为并发
- 多终端售票(多线程与多进程)
- 售票系统与多线程
- 编写 三个类 ticket,sealWindow,ticketSealCenter,代表票信息,售票窗口,售票中心, 售票中心分配一定数量的票(多个窗口实现多线程售票)
- 售票小程序,通过多线程实现多窗口售票
- 模拟多人售票的多线程测试
- Java:多线程模拟多站点售票过程
- 售票(多线程)
- 多线程与多进程
- 多线程与多进程
- 多线程与多进程
- 多线程与多进程
- 多进程与多线程
- 多进程与多线程
- 多进程与多线程
- 多线程与多进程
- 多进程与多线程
- 多进程与多线程
- 多线程与多进程
- [hdu3790]最短路径问题
- microsoft.net framework 4.0安装失败-NET Framework 更新安装错误:"0x80070643"
- 大话设计模式(四)单例模式的优与劣
- Node.js使用qq邮箱实现邮件发送
- Java_ajvm虚拟机的下载及编译
- 多终端售票(多线程与多进程)
- 把C++当脚本语言写
- 基于Jenkins+Git+Gradle的Android持续集成
- Ubuntu网络配置以DHCP方式配置网卡
- FFT模板
- /dev/null 2>&1
- 多线程编程1 - NSThread
- oracle学习笔记 buffer_cache大小的设置及依据
- 怎么投资理财,如果有且仅有100万本金?