| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 776 人关注过本帖
标题:线程同步问题
只看楼主 加入收藏
qq2211
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-10-16
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:2 
线程同步问题
#include <stdio.h>
#include <process.h>
#include <windows.h>
#include <stdlib.h>
const int END_PRODUCE_NUMBER = 10;
int integer;
CRITICAL_SECTION g_cs;//互斥信号量
HANDLE g_hSemaphoreBufferEmpty, g_hSemaphoreBufferFull;
unsigned int __stdcall ProducerThreadFun(PVOID pM)
{
    while(true)
    {
        printf("\n---------------正在向陛下申请生产资源");
        WaitForSingleObject(g_hSemaphoreBufferEmpty, INFINITE);
        EnterCriticalSection(&g_cs);
        integer+=1;
        printf("\n禀告陛下,臣已经生产完成一件产品,现在仓库还有%d件产品。",integer);
        LeaveCriticalSection(&g_cs);
        ReleaseSemaphore(g_hSemaphoreBufferFull, 1, NULL);
        if(getchar()!='\n')
            break;
    }
    printf("\n陛下,生产大臣已经超额完成任务,英勇牺牲。");
    return 0;
}
unsigned int __stdcall ConsumerThreadFun(PVOID pM)
{
    while(true)
    {
        printf("\n---------------贪官正在向陛下申请消费资源");
        WaitForSingleObject(g_hSemaphoreBufferFull, INFINITE);
        EnterCriticalSection(&g_cs);
        integer-=1;
        printf("\n    %d禀告陛下,臣发现丢失一件产品,现在仓库还有%d件产品。",GetCurrentThreadId(),integer);
        ReleaseSemaphore(g_hSemaphoreBufferEmpty, 1, NULL);
        LeaveCriticalSection(&g_cs);
        if(getchar()!='\n')
            break;
    }
    printf("\n陛下,大臣家中发现大量财物,判断为贪官。");
    return 0;
}



int main()
{
    printf("  生产者消费者问题   1生产者 2消费者 4缓冲区\n");
    //InitializeCriticalSection(&g_cs);
    InitializeCriticalSection(&g_cs);
    g_hSemaphoreBufferEmpty = CreateSemaphore(NULL, 1, 1, NULL);
    g_hSemaphoreBufferFull  = CreateSemaphore(NULL, 0, 1, NULL);
    integer=0;
    HANDLE hThread[1];
    hThread[0] = (HANDLE)_beginthreadex(NULL, 0, ProducerThreadFun, NULL, 0, NULL);
    hThread[1] = (HANDLE)_beginthreadex(NULL, 0, ConsumerThreadFun, NULL, 0, NULL);
    WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
    for (int i = 0; i <2; i++)
        CloseHandle(hThread[i]);
    CloseHandle(g_hSemaphoreBufferEmpty);
    CloseHandle(g_hSemaphoreBufferFull);
    DeleteCriticalSection(&g_cs);

    system("pause");
    return 0;
}
锁进程时候出现问题
搜索更多相关主题的帖子: 资源 include 
2016-12-08 15:32
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:20 
HANDLE hThread[1];
hThread[0] = (HANDLE)_beginthreadex(NULL, 0, ProducerThreadFun, NULL, 0, NULL);
hThread[1] = (HANDLE)_beginthreadex(NULL, 0, ConsumerThreadFun, NULL, 0, NULL);
hThread有2个元素?
2016-12-08 16:01
qq2211
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-10-16
收藏
得分:0 
回复 2楼 吹水佬
我的天,原来犯了低级错误。谢谢你了
2016-12-08 16:21
快速回复:线程同步问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028322 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved