好文档 - 专业文书写作范文服务资料分享网站

缓冲池模拟与实现

天下 分享 时间: 加入收藏 我要投稿 点赞

Sleep(100);

////同步与互斥的控制

WaitForSingleObject(hsemOUTQ,INFINITE);

WaitForSingleObject(hmutexOUTQ,INFINITE);

Outputbuf = getBuf(OUTQ) ; //从输出队列中提取一个提取输出缓冲 区

cout<<\输出线程从 \缓冲单元 \提取输

出--->\

//Outputbuf->buf = -1 ; //提取完成后将该缓冲区回收

ReleaseMutex(hmutexOUTQ);

WaitForSingleObject(hmutexEMQ,INFINITE);

putBuf(EMQ,Outputbuf) ; //回收的把它挂载到空队列的队尾

ReleaseMutex(hmutexEMQ);

ReleaseSemaphore(hsemEMQ,1,NULL); }

return 0; }

//计算线程函数的实现

DWORD WINAPI CalThreadFunc(LPVOID lpPara) //计算线程函数 {

buffer* Calbuf1 = NULL;

buffer* Calbuf2 =NULL;

int nCal;

while(m_end) {

Sleep(10); //

休眠时间应很小

////同步与互斥的控制

WaitForSingleObject(hsemINQ,INFINITE);

WaitForSingleObject(hmutexINQ,INFINITE);

Calbuf1 = getBuf(INQ); //从输入队列中提取一个收容输入缓冲区

nCal = Calbuf1->buf; //提取数据

cout<<\计算线程从 \缓冲单元 \提取输入

--->\

//Calbuf->buf = -1 ; //

ReleaseMutex(hmutexINQ);

WaitForSingleObject(hmutexEMQ,INFINITE);

putBuf(EMQ,Calbuf1);

ReleaseMutex(hmutexEMQ);

ReleaseSemaphore(hsemEMQ,1,NULL);

nCal = nCal + 10000 ; //模拟输入数据的处理

WaitForSingleObject(hsemEMQ,INFINITE);

WaitForSingleObject(hmutexEMQ,INFINITE);

Calbuf2 = getBuf(EMQ); //得到一个空的缓冲区作为收容输出

Calbuf2->buf = nCal ; //存入运算结果

cout<<\计算线程从 \缓冲单元 \收容输出

--->\

ReleaseMutex(hmutexEMQ);

WaitForSingleObject(hmutexOUTQ,INFINITE); //把收容输出缓冲区挂

载到输出队列的队尾

putBuf(OUTQ,Calbuf2);

ReleaseMutex(hmutexOUTQ);

ReleaseSemaphore(hsemOUTQ,1,NULL); }

return 0 ; }

//从队列中得到队头结点函数(实际相当于删除一个结点操作)

buffer* getBuf(int type) {

buffer* Returnbuf = NULL;

switch(type) {

case 0 : {

//判断该队列的缓冲个数是否还只有一个

if(hemq != lemq && hemq->next->next != NULL) {

Returnbuf = hemq->next ; //取得队列头 hemq->next = Returnbuf->next; //修正队列链表头指针的指 向

Returnbuf->next = NULL;

return Returnbuf; } else { //

指针相等级

缓冲池模拟与实现

Sleep(100);////同步与互斥的控制WaitForSingleObject(hsemOUTQ,INFINITE);WaitForSingleObject(hmutexOUTQ,INFINITE);Outputbuf=getBuf(OUTQ);//从输出队列中
推荐度:
点击下载文档文档为doc格式
0l85c2aakl5nd0e7mk71
领取福利

微信扫码领取福利

微信扫码分享