Ticket Selling System
C++
Demo1: Create a basic thread
#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
//线程函数
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
for (int i = 0; i < 5; ++ i)
{
cout << "子线程:i = " << i << endl;
Sleep(100);
}
return 0L;
}
int main()
{
//创建一个线程
HANDLE thread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
//关闭线程
CloseHandle(thread);
//主线程的执行路径
for (int i = 0; i < 5; ++ i)
{
cout << "主线程:i = " << i << endl;
Sleep(100);
}
return 0;
}
---------------------
作者:luoweifu
来源:CSDN
原文:https://blog.csdn.net/luoweifu/article/details/46835437
版权声明:本文为博主原创文章,转载请附上博文链接!Demo2: Passing arguments into thread
结果
CreateMutex、WaitForSingleObject、ReleaseMutex
从【Demo2】中可以看出,虽然创建的子线程都正常执行起来了,但输出的结果并不是我们预期的效果。我们预期的效果是每输出一条语句后自动换行,但结果却并非都是这样。这是因为在线程执行时没有做同步处理,比如第一行的输出,主线程输出“主线程 ===”后时间片已用完,这时轮到子线程1输出,在子线程输出“线程1 —”后时间片也用完了,这时又轮到主线程执行输出“0”,之后又轮到子线程1输出“0”。于是就出现了“主线程 === 线程1 — 0 0”的结果。
主线程:cout << “主线程 === ” << i << endl; 子线程:cout << pThreadData->strThreadName << ” — ” << i << endl;
为避免出现这种情况,我们对线程做一些简单的同步处理,这里我们用互斥量(Mutex)
Demo3: Thread synchronization
结果
为进一步理解线程同步的重要性和互斥量的使用方法,我们再来看一个例子。
买火车票是大家春节回家最为关注的事情,我们就简单模拟一下火车票的售票系统(为使程序简单,我们就抽出最简单的模型进行模拟):有500张从北京到赣州的火车票,在8个窗口同时出售,保证系统的稳定性和数据的原子性。
Demo 4: Ticket Selling System
SaleTickets.h :
SaleTickets.cpp :
测试程序:
结果:
Python
多线程模拟卖票系统 主要知识点就是 线程的创建(提供了两种方式一个是通过threading.Thread()方法,一个是用过Thread类创建)和线程锁(threading.Lock())
第一种方法:通过Thread类模拟
第二种方法:通过threading.Thread()方法模拟
Last updated