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