賣票——多執行緒模擬賣票系統
網上搶票,方便又高效,很舒服。應用多執行緒的同步執行可以模擬很多人搶票,而且不會發生衝突。下面,我們就來利用多執行緒來模擬一把。
#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)
使用Redis中介軟體解決商品秒殺活動中出現的超賣問題(使用Java多執行緒模擬高併發環境)
開發十年,就只剩下這套架構體系了! >>>
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的地址空間(按需提交)用於執行緒使用者模