1. 程式人生 > >賣票——多執行緒模擬賣票系統

賣票——多執行緒模擬賣票系統

網上搶票,方便又高效,很舒服。應用多執行緒的同步執行可以模擬很多人搶票,而且不會發生衝突。下面,我們就來利用多執行緒來模擬一把。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

int Tickets = 100;      //定義票數為全域性變數,所以執行緒都可訪問

pthread_mutex_t mutex;  //定義互斥鎖

void delay()        //自定義延遲函式,不可使用sleep
{
    int x = rand() % 30000;
    int y;

    while
(x > 0) { y = rand() % 30000; while (y > 0) { y--; } x--; } } void *SaleTicket(void *arg) { int cur_ticket; //定義當前票數 while(1) { pthread_mutex_lock(&mutex); //加鎖 cur_ticket = Tickets; if (cur_ticket <= 0
) { pthread_mutex_unlock(&mutex); break; } printf("當前票數為:%d\n", cur_ticket); delay(); //隨機延遲 cur_ticket--; Tickets = cur_ticket; //把當前票數返回給全域性變數,讓所有執行緒都知道 pthread_mutex_unlock(&mutex); //解鎖 } } int main() { pthread_t tid[5
] = {0}; //定義5個執行緒ID int ret, i; srand(time(NULL)); //初始化隨機函式 ret = pthread_mutex_init(&mutex, NULL); //初始化互斥鎖 if (0 != ret) //初始化失敗返回0 { perror("pthread_mutex_init"); exit(1); } for (i= 0; i < 5; i++) //模擬5個執行緒同時執行 { ret = pthread_create(&tid[i], NULL, SaleTicket, NULL); //建立執行緒 if (0 != ret) //建立失敗 { perror("pthread_create"); exit(1); } } for(i = 0; i < 5; i++) { pthread_join(tid[i], NULL); //執行緒等待 } pthread_mutex_destroy(&mutex); //最後銷燬互斥鎖 return 0; }

執行結果:
這裡寫圖片描述

這裡寫圖片描述

相關推薦

——執行模擬系統

網上搶票,方便又高效,很舒服。應用多執行緒的同步執行可以模擬很多人搶票,而且不會發生衝突。下面,我們就來利用多執行緒來模擬一把。 #include <stdio.h> #include &

Java用執行實現

    Java小白一個,剛開始學習執行緒,在這個過程中遇到了一些麻煩,經過2天的努力,終於弄懂了用多執行緒實現賣票的程式,嗯嗯,記錄一下!public class TicketImpDemo { public static void main(String[] args)

C++11執行問題

#include <thread> #include <mutex> #include <iostream> #include <vector> voi

使用 Python 進行HTTP代理 執行刷(投)

這幾天朋友參加比賽需要,就寫了個指令碼幫忙刷票. 我們首先來到要投票的網站上來看看。 隨便找一個投上一票 居然不用登陸,當然是每個IP只能投一票。 開啟Chrome dev tools, 看一下 Get請求。 那直接把Request URL複製下

Java執行基礎—買案例

這段程式碼是一個簡單的多執行緒同時買票的案例,建立三個執行緒買票,當票數賣完後另外一個執行緒負責將票數補回到100。 附上程式碼: public class ThreadShare { public static void main(String[

java:Map集合模擬鬥地主,執行模擬搶地主 例項

 原始碼如下: package selfpractice.day4; import java.util.*; //多執行緒模擬搶地,重點程式碼位於loot()方法內 public class Practice_Poker { public static void main(S

執行模擬實現生產者/消費者模型

多執行緒模擬實現生產者/消費者模型 package com.chow.queue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java

執行模擬搶紅包

今天有朋友問我一道面試題,有5個人搶5個紅包,可重複搶,用多執行緒程式實現,實現方式有多種,分享一下我的思路:應用了阻塞佇列的特性 /** * Created by zhanglinqiang on 2016/6/23. */ public class MyTest

JAVA學習之路(執行)---模擬售票(細解)

首先看題目描述: 假設有火車票100張,建立4個執行緒模擬4個售票點,每100ms售出一張,打印出售票過程,格式如下: 視窗3:賣出第100張票 視窗4:賣出第99張票  ............ ............ 簡單的思路就是建立一個類,首先肯定要去繼承Thread。開啟執行

生產者和消費者執行模擬

package yn.ngems.cn; class Message{     private String title;     private String content;     private boo

Linux下執行模擬生產者/消費者問題

/*用執行緒的同步和互斥來實現"生產者-消費者"問題.*/ /* 多生產者多消費者多緩衝區 生產者和消費者不可同時進行 */ #include <stdio.h> #include <stdlib.h> //#include <unistd.h

【OS】PV操作-理髮師問題-VC++執行模擬實現

自己除錯的,最近學OS,感覺還是用除錯除錯PV操作才踏實! #include "stdafx.h" #include "windows.h" #include "process.h" #include "iostream.h" #define N 5 #define M

Java執行模擬售票系統

Java建立多執行緒的兩種基本方法:方法1.繼承Thread類(1)定義子類,繼承Thread類,重寫該類的run()方法作為執行緒執行體;(2)建立該子類的例項作為執行緒物件;(3)呼叫執行緒物件的start()方法來啟動執行緒;我們以模擬火車售票系統為例:public c

Java 執行 模擬銀行ATM實時存取錢

近期想回顧一些知識: 一、Java 多執行緒 一條執行緒指的是程序中一個單一順序的控制流,一個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。多執行緒是多工的一種特別的形式,但多執行緒使用了更小的資源開銷。這裡定義和執行緒相關的另一個術

執行模擬高併發情況redis 與資料庫快取不一致

import com.mysql.jdbc.Connection; import entity.User; import org.junit.Test; import redis.clients.jedis.Jedis; import java.sql.*; import

java執行模擬loadrunner進行壓測

package syttest; /** * @author yuzhuliu: * @version 建立時間:2017年9月26日 下午11:58:21 * 類說明 */ public

執行不重複售票系統

/*==================================================== Copyright © 2018 All rights reserved. 檔名稱:sell_train_ticket.c 建立日期:2018年

執行中的鎖系統(一)-基礎用法

     平常在多執行緒開發中,總避免不了執行緒同步。本篇對net多執行緒中的鎖系統做個簡單描述。 閱讀目錄: lock、Monitor Lock是Monitor語法糖簡化寫法,Lock在IL會生成Monitor。 //======Example 1=====

執行的優劣/效能/系統開銷

轉自:http://hi.baidu.com/goga/blog/item/ef7e8326af7ae31f8b82a103.html 執行緒建立之前 1.系統為執行緒分配並初始化一個執行緒核心物件; 2.系統為每個執行緒保留1MB的地址空間(按需提交)用於執行緒使用者模