精品偷拍一区二区三区,亚洲精品永久 码,亚洲综合日韩精品欧美国产,亚洲国产日韩a在线亚洲

  • <center id="usuqs"></center>
  • 
    
  • 操作系統(tǒng)中的信號量機制問題

    操作系統(tǒng)中的信號量機制問題
    某車站售票廳,任何時刻最多可容納20名購票者進入,當售票廳中少于20名購票者時,廳外的購票者可立即進入,否則需要在外面等待.每個購票者可看成一個進程.
    要求:再寫C語言代碼 要完整的
    其他人氣:839 ℃時間:2020-07-05 22:35:03
    優(yōu)質(zhì)解答
    一、問題描述
    生產(chǎn)者-消費者問題是一個經(jīng)典的進程同步問題,該問題最早由Dijkstra提出,用以演示他提出的信號量機制.
    他要求設計在同一個進程地址空間內(nèi)執(zhí)行的兩個線程.
    生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個空緩沖區(qū)中供消費者線程消費.
    消費者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū).
    當生產(chǎn)者線程生產(chǎn)物品時,如果沒有空緩沖區(qū)可用,那么生產(chǎn)者線程必須等待消費者線程釋放出一個空緩沖區(qū).
    當消費者線程消費物品時,如果沒有滿的緩沖區(qū),那么消費者線程將被阻塞,直到新的物品被生產(chǎn)出來.
    同理 本問題也是要求設計在同一個進程地址空間內(nèi)執(zhí)行的兩個線程.
    當車站售票廳達到20人上線時,必須等有人走出車站售票廳,車站售票廳外的購票者才可進入.就如上面
    生產(chǎn)者線程生產(chǎn)物品時,如果沒有空緩沖區(qū)可用,那么生產(chǎn)者線程必須等待消費者線程釋放出一個空緩沖區(qū).此時廳外購票者進入大廳這個事件可以看做是一個生產(chǎn)者線程,而廳內(nèi)購票者走出廳外這個事件就可以看做是一個消費者線程.如此問題迎刃而解.
    二、實現(xiàn)代碼
    #include
    #include
    const unsigned short SIZE_OF_BUFFER = 10; //緩沖區(qū)長度
    unsigned short ProductID = 0; //產(chǎn)品號
    unsigned short ConsumeID = 0; //將被消耗的產(chǎn)品號
    unsigned short in = 0; //產(chǎn)品進緩沖區(qū)時的緩沖區(qū)下標
    unsigned short out = 0; //產(chǎn)品出緩沖區(qū)時的緩沖區(qū)下標
    int g_buffer[SIZE_OF_BUFFER]; //緩沖區(qū)是個循環(huán)隊列
    bool g_continue = true; //控制程序結(jié)束
    HANDLE g_hMutex; //用于線程間的互斥
    HANDLE g_hFullSemaphore; //當緩沖區(qū)滿時迫使生產(chǎn)者等待
    HANDLE g_hEmptySemaphore; //當緩沖區(qū)空時迫使消費者等待
    DWORD WINAPI Producer(LPVOID); //生產(chǎn)者線程
    DWORD WINAPI Consumer(LPVOID); //消費者線程
    int main()
    {
    //創(chuàng)建各個互斥信號
    g_hMutex = CreateMutex(NULL,FALSE,NULL);
    g_hEmptySemaphore = CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL);
    //調(diào)整下面的數(shù)值,可以發(fā)現(xiàn),當生產(chǎn)者個數(shù)多于消費者個數(shù)時,
    //生產(chǎn)速度快,生產(chǎn)者經(jīng)常等待消費者;反之,消費者經(jīng)常等待
    const unsigned short PRODUCERS_COUNT = 3; //生產(chǎn)者的個數(shù)
    const unsigned short CONSUMERS_COUNT = 1; //消費者的個數(shù)
    //總的線程數(shù)
    const unsigned short THREADS_COUNT = PRODUCERS_COUNT+CONSUMERS_COUNT;
    DWORD producerID[CONSUMERS_COUNT]; //生產(chǎn)者線程的標識符
    DWORD consumerID[THREADS_COUNT]; //消費者線程的標識符
    //創(chuàng)建生產(chǎn)者線程
    for (int i=0;i
    我來回答
    類似推薦
    請使用1024x768 IE6.0或更高版本瀏覽器瀏覽本站點,以保證最佳閱讀效果。本頁提供作業(yè)小助手,一起搜作業(yè)以及作業(yè)好幫手最新版!
    版權(quán)所有 CopyRight © 2012-2024 作業(yè)小助手 All Rights Reserved. 手機版