代码拉取完成,页面将自动刷新
同步操作将从 codeheng/Linux_commom_ipc_interface 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "commom_ipc.h"
#include <unistd.h>
#include <iostream>
using namespace std;
#define KEY 0x87654321
#define AVAIL_VALUE 5
#define MUTEX_VALUE 1
#define FULL_VALUE 0
#define MUTEX_INDEX 0
#define AVAIL_INDEX 1
#define FULL_INDEX 2
int produce(ShareMemoryData *pdata)
{
/*
int temp = pdata->start;
pdata->start = (pdata->start + 1) % AVAIL_VALUE;
cout<< "produce: "<<temp<<endl;
*/
return SUCCESS;
}
int consume(ShareMemoryData *pdata)
{
/*
int temp = pdata->end;
pdata->end = (pdata->end + 1) % AVAIL_VALUE;
cout<< "consume: "<<temp<<endl;
*/
return SUCCESS;
}
int main()
{
int i = 0,child = -1;
Semaphore my_sem(KEY, 3);
ShareMemory shm(KEY);
ShareMemoryData shm_data;
my_sem.InitSem(MUTEX_INDEX,MUTEX_VALUE);
my_sem.InitSem(AVAIL_INDEX,AVAIL_VALUE);
my_sem.InitSem(FULL_INDEX,FULL_VALUE);
for(i = 0; i < 5; i++)
{
if((child = fork()) < 0)
{
printf("the fork failed");
exit(1);
}
else if(child == 0)
{
printf("process[%d],PID = %d\n",i,getpid());
Semaphore my_sem(KEY, 3);
ShareMemory shm(KEY);
ShareMemoryData shm_data;
while(1)
{
my_sem.WaitSem(FULL_INDEX);
my_sem.WaitSem(MUTEX_INDEX);
shm.get_shm(&shm_data);
consume(&shm_data);
shm.set_shm(&shm_data);
my_sem.SignalSem(MUTEX_INDEX);
my_sem.SignalSem(AVAIL_INDEX);
}
break;
}
}
if(child > 0)
{
while(1)
{
my_sem.WaitSem(AVAIL_INDEX);
my_sem.WaitSem(MUTEX_INDEX);
shm.get_shm(&shm_data);
produce(&shm_data);
shm.set_shm(&shm_data);
my_sem.SignalSem(MUTEX_INDEX);
my_sem.SignalSem(FULL_INDEX);
usleep(10*1000);
}
}
return SUCCESS;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。