/*
這裡使用到幾個常用函式:
#include//訊號量
handle winapi createsemaphore(
_in_opt_ lpsecurity_attributes lpsemaphoreattributes //安全屬性,如果為null則是預設安全屬性
_in_ long linitialcount,//訊號量的初始值,要》=0且<=第三個引數
_in_ long lmaximumcount,//訊號量的最大值
_in_opt_ lpctstr lpname //訊號量的名稱
);return : 指向訊號量的控制代碼,如果建立的訊號量和已有的訊號量重名,那麼返回已經存在的訊號量控制代碼
//p操作
dword waitforsingleobject(
handle hhandle, //等待物件的 handle(代表乙個核心物件)。
dword dwmilliseconds //等待的最長時間。時間終了,即使 handle尚未成為激發狀態,此函式也要返回。此值可以是0(代表立刻返回),也可以是 infinite代表無窮等待。
);//v操作
bool winapi releasesemaphore(
_in_ handle hsemaphore, //訊號量控制代碼
_in_ long lreleasecount, //釋放後,訊號量增加的數目
_out_opt_ lplong lppreviouscount //訊號量增加前的值存放的位址,如果不需要則為null
);return 釋放是否成功
_beginthreadex()
c語言庫 #include中的函式, 用來建立乙個執行緒
unsigned long _beginthreadex(
void *security, // 安全屬性, 為null時表示預設安全性
unsigned stack_size, // 執行緒的堆疊大小, 一般預設為0
unsigned(_stdcall *start_address)(void *), // 所要啟動的執行緒函式
void *argilist, // 執行緒函式的引數, 是乙個void*型別, 傳遞多個引數時用結構體
unsigned initflag, // 新執行緒的初始狀態,0表示立即執行,create_suspended表示建立之後掛起
unsigned *threaddr // 用來接收執行緒id
);return // 成功返回新執行緒控制代碼, 失敗返回0
*/
#include
#include
#include
#include
using
namespace std;
//handle 設定控制代碼
//handle mutex;//互斥訊號量
//思考後你會發現,如果盤子容量為1;這個不需要互斥量也能實現程序互斥,該阻塞的時候還是阻塞;
//同步訊號量 蘋果 橘子 盤子
int buf_max;
//緩衝池大小 盤子可以放幾個水果
0, product_orange =0;
//產品數量
//爸爸放蘋果執行緒
(void*)
return1;
}//媽媽放橘子執行緒
unsigned __stdcall momtoorange
(void*)
return1;
}//女兒吃蘋果執行緒
(void*)
return2;
}//兒子吃橘子執行緒
unsigned __stdcall soneatorange
(void*)
return2;
}int
main()
//建立訊號量
plate =
createsemaphore
(null
, buf_max, buf_max,
null);
//初值化盤子容量
createsemaphore
(null,0
, buf_max,
null);
//初值為0,最大為盤子容量
orange =
createsemaphore
(null,0
, buf_max,
null);
//初值為0,最大為盤子容量
//mutex = createsemaphore(null, 1, 1, null); //初值為1,最大為1
handle hth1, hth2, hth3, hth4;
//執行緒控制代碼
//建立執行緒
hth1 =
(handle)
_beginthreadex
(null,0
null,0
,null);
hth2 =
(handle)
_beginthreadex
(null,0
, momtoorange,
null,0
,null);
hth3 =
(handle)
_beginthreadex
(null,0
, soneatorange,
null,0
,null);
hth4 =
(handle)
_beginthreadex
(null,0
null,0
,null);
//等待子執行緒結束
waitforsingleobject
(hth1, infinite)
;waitforsingleobject
(hth2, infinite)
;waitforsingleobject
(hth3, infinite)
;waitforsingleobject
(hth4, infinite)
;//關閉控制代碼
closehandle
(hth1)
;closehandle
(hth2)
;closehandle
(hth3)
;closehandle
(hth4)
;closehandle
(plate)
;closehandle
;closehandle
(orange)
;//closehandle(mutex);
}
python queue 多生產者,多消費者
專案需求是從快 爬取ip,運用到專案中,設定佇列的大小,當有ip被消耗時,就新增新的ip到佇列中,獲取ip的頁面是不斷重新整理的。總的來說,就是一方不斷把爬取ip存到佇列中,一方不斷從佇列中取ip,消耗ip,此處爬取的是快 首先建立乙個佇列 from queue import queue q que...
生產消費模型 多生產者vs多消費者
使用場景 遊戲中多個玩家生產任務,伺服器多執行緒處理任務,netty工作執行緒收到客戶端傳來資料,生成任務後,加入到任務佇列中 public abstract class basetask 任務管理器 public class mutitaskmanager private final static...
單生產者 多消費者模型
問題出處 生產者消費者問題 有乙個生產者在生產產品,這些產品將提供給若干個消費者去消費,為了使生產者和消費者能併發執行,在兩者之間設定乙個有多個緩衝區的緩衝池,生產者將它生產的產品放入乙個緩衝區中,消費者可以從緩衝區中取走產品進行消費,所有生產者和消費者都是非同步方式執行的,但它們必須保持同步,即不...