问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

死锁解决C语言程序

发布网友 发布时间:2022-04-09 23:46

我来回答

1个回答

热心网友 时间:2022-04-10 01:15

#include <windows.h>
#include <iostream>
#include<time.h>
const unsigned short SIZE_OF_BUFFER = 1; //缓冲区长度
int g_buffer[SIZE_OF_BUFFER];
bool g_continue = true; //控制程序结束
HANDLE g_hMutex; //用于线程间的互斥
DWORD WINAPI FatherProc(LPVOID); //父进程线程
DWORD WINAPI SonProc(LPVOID); //使用打印机的线程
int main()
{
//创建各个互斥信号
g_hMutex = CreateMutex(NULL,FALSE,NULL);
const unsigned short FATHERS_COUNTS = 1; //父进程线程的个数
const unsigned short SONS_COUNT = 2; //使用打印机的线程的个数

//总的线程数
const unsigned short THREADS_COUNT = FATHERS_COUNTS+SONS_COUNT;
HANDLE hThreads[THREADS_COUNT]; //各线程的handle
DWORD fatherID[FATHERS_COUNTS]; //父进程线程的标识符
DWORD sonID[SONS_COUNT]; //使用打印机的线程的标识符

//父进程线程
for (int i=0;i<FATHERS_COUNTS;++i){
hThreads[i]=CreateThread(NULL,0,FatherProc,NULL,0,&fatherID[i]);
if (hThreads[i]==NULL) return -1;
}
//使用打印机的线程
for (i=0;i<SONS_COUNT;++i){
hThreads[SONS_COUNT+i]=CreateThread(NULL,0,SonProc,NULL,0,&sonID[i]);
if (hThreads[i]==NULL) return -1;
}
while(g_continue){
if(getchar())
{ //按回车后终止程序运行
g_continue = false;
}
}
return 0;
}
//分配打印机
void Append()
{
srand((unsigned)time(0));
std::cerr << "打印机空闲 ...\n";
if(rand()%2)
{
g_buffer[0]=1;//给PA
}
else
{
g_buffer[0]=0;//给PB
}
}
//son使用打印机
void Take()
{
if(g_buffer[0]==1)
{
std::cerr << "PA使用打印机 ... ";
std::cerr << "成功" << std::endl<<std::endl; ;
};
if(g_buffer[0]==0)
{
std::cerr << "PB使用打印机 ... ";
std::cerr << "成功" << std::endl<<std::endl; ;
};
g_buffer[0]=-1;
}
//父进程
DWORD WINAPI FatherProc(LPVOID lpPara)
{
while(g_continue){
WaitForSingleObject(g_hMutex,INFINITE);
Append();
Sleep(1500);
ReleaseMutex(g_hMutex);
}
return 0;
}
//子进程
DWORD WINAPI SonProc(LPVOID lpPara)
{
while(g_continue){
WaitForSingleObject(g_hMutex,INFINITE);
Take();
Sleep(1500);
ReleaseMutex(g_hMutex);
}
return 0;
} 最后的要求自己添加
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八个月孕妇痔疮怎么办 怀孕痔疮严重怎么缓解 孕妇能割痔疮吗 孕37周痔疮严重怎么办 孕37周痔疮可以顺产吗 怀孕晚期痔疮严重怎么办 我打开网上邻居,里面变成空的了,以前打开就有“宽带连接”和“本地连 ... 单位有些电脑打开网上邻居没东西显示是为什么? 生产线称重 梦比优斯奥特曼第35集19:38秒时,希卡利站起来时的那个背景音乐是... 梦比优斯奥特曼中希卡利出现时的音乐 报名郑州大学远程教育需要参加入学考试吗?考试难吗 郑州大学远程教育本科怎么样 好毕业么 郑州大学远程教育到现在也没拿到毕业证我也是跟你一批的? 郑州大学远程教育的学历被国家承认么 朋友欠款招行还不上,现在想要还款,银行要求一次性全还清,确实有困难该怎么办? 如何做豆腐面条鱼汤 郑大远程教育考试补考要交补考费吗 面条鱼豆腐汤的做法,面条鱼豆腐汤怎么做好吃 如果郑州大学远程教育机电一体化毕业没考过能补考几次? 小额贷款还不上会影响工作吗 我是国企单位的有小额贷款现在无力偿还怎么办 本人在国企工作,由于做理财被诈骗了全部财产欠银行的贷款也还不上了,能不能和单位预支5年工资? [招商银行北京分行-招行(社保贷)]我是国企员工,工资打卡4000以上,工作5年了,信用卡有过逾期 中国共产党如何从幼稚走向成熟 从幼稚到成熟是个什么感觉 幼稚的我要怎么改变成成熟? 如何完成一个人思想上从幼稚到成熟的转变? 从幼稚从幼稚到成熟用什么句子来形容 个人怎样注册商标呢?要多少钱? 专套本考试全通过之后要拿到学士学位证需要什么要求? 郑州大学远程教育本科英语专业怎么样?好不好考,容易过吗?我大专文凭,已工作,先谢谢,希望读过或正在 郑州大学远程教育学院专生本考试零基础怎么考 开通乐花卡账号后只给了一个银行账号,我怎么还款呢? 郑州大学远程教育网上学习没有分数修完怎么办?会不会不让毕业啊 郑大远程教育答辩难不难,好过吗? 面条鱼萝卜汤怎么做好吃,面条鱼萝卜汤的家 汤怎么做好吃,面条鱼豆腐汤的家常做法 面鱼(面疙瘩汤)怎么做 男人把女人变成奶牛是什么意思好 面条鱼挂面汤的做法,面条鱼挂面汤怎么做好吃 面条鱼炒鸡蛋怎么做好吃 你怎么看于谦为了让儿子喝奶养奶牛这件事? 甲将乙的奶牛当成自己的奶牛而精心饲养,甲可否主张无因管理? 养奶牛的人牛奶掉价为什么要杀奶牛倒牛奶 不记得自己的QQ密码和密保手机号码该怎么盗回QQ? qq设置了密保是不是知道我设的密保手机号码就可以盗 qq号被盗密保手机号也被盗了怎么办 我的QQ号被盗了,密保手机号码什么的全部被改了,我该怎么办? QQ被盗密保手机号 我QQ一夜被盗 密保和手机号码都被改了 盗号者是怎么做到的