#include <iostream>
#include <functional>
using namespace std;
void P(int &s)
{
while(s==0);
s= s-1;
}
void V(int &s)
{
s= s+1;
}
int main()
{
int pp=0,cp=0,ps=10,cs=0,pps=1,ccs=1,pcs=1;
int buff[ps]={0},x=0;
cout<<"before any edit:"<<endl;
for(int i=0;i<10;i++)cout<<buff[i]<<"\t";
cout<<endl;
cout<<x<<endl;
//-----------Producer-1------------------------------
P(pps);
P(pcs);
P(ps);
buff[pp]=1;
cout<<"after producing:"<<endl;
for(int i=0;i<10;i++)cout<<buff[i]<<"\t";
cout<<endl;
cout<<x<<endl;
pp++;
if(pp>=10)
pp=0;
V(cs);
/*
//-----------Producer-2------------------------------
P(pps);
P(pcs);
P(ps);
buff[pp]=1;
cout<<"after producing:"<<endl;
for(int i=0;i<10;i++)cout<<buff[i]<<"\t";
cout<<endl;
cout<<x<<endl;
pp++;
if(pp>=10)
pp=0;
V(cs);
V(pcs);
V(pps);*/
V(pcs);
V(pps);
//-----------Consumer-1------------------------------
P(ccs);
P(pcs);
P(cs);
x=buff[cp];
buff[cp]=0;
cout<<"after consuming:"<<endl;
for(int i=0;i<10;i++)cout<<buff[i]<<"\t";
cout<<endl;
cout<<x<<endl;
cp++;
if(cp>=10)
cp=0;
V(ps);
/*//-----------Consumer-2------------------------------
P(ccs);
P(pcs);
P(cs);
x=buff[cp];
buff[cp]=0;
cout<<"after consuming:"<<endl;
for(int i=0;i<10;i++)cout<<buff[i]<<"\t";
cout<<endl;
cout<<x<<endl;
cp++;
if(cp>=10)
cp=0;
V(ps);
V(pcs);
V(ccs);*/
V(pcs);
V(ccs);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnZvaWQgUChpbnQgJnMpCnsKICAgIHdoaWxlKHM9PTApOwogICAgcz0gcy0xOwp9CnZvaWQgVihpbnQgJnMpCnsKICAgIHM9IHMrMTsKfQppbnQgbWFpbigpCnsKICAgIGludCBwcD0wLGNwPTAscHM9MTAsY3M9MCxwcHM9MSxjY3M9MSxwY3M9MTsKICAgIGludCBidWZmW3BzXT17MH0seD0wOwogICAgY291dDw8ImJlZm9yZSBhbnkgZWRpdDoiPDxlbmRsOwogICAgZm9yKGludCBpPTA7aTwxMDtpKyspY291dDw8YnVmZltpXTw8Ilx0IjsKICAgIGNvdXQ8PGVuZGw7CiAgICBjb3V0PDx4PDxlbmRsOwogICAgLy8tLS0tLS0tLS0tLVByb2R1Y2VyLTEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIFAocHBzKTsKICAgIFAocGNzKTsKICAgIFAocHMpOwogICAgYnVmZltwcF09MTsKICAgIGNvdXQ8PCJhZnRlciBwcm9kdWNpbmc6Ijw8ZW5kbDsKICAgIGZvcihpbnQgaT0wO2k8MTA7aSsrKWNvdXQ8PGJ1ZmZbaV08PCJcdCI7CiAgICBjb3V0PDxlbmRsOwogICAgY291dDw8eDw8ZW5kbDsKICAgIHBwKys7CiAgICBpZihwcD49MTApCiAgICAgICAgcHA9MDsKICAgIFYoY3MpOwogICAgLyoKICAgIC8vLS0tLS0tLS0tLS1Qcm9kdWNlci0yLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBQKHBwcyk7CiAgICBQKHBjcyk7CiAgICBQKHBzKTsKICAgIGJ1ZmZbcHBdPTE7CiAgICBjb3V0PDwiYWZ0ZXIgcHJvZHVjaW5nOiI8PGVuZGw7CiAgICBmb3IoaW50IGk9MDtpPDEwO2krKyljb3V0PDxidWZmW2ldPDwiXHQiOwogICAgY291dDw8ZW5kbDsKICAgIGNvdXQ8PHg8PGVuZGw7CiAgICBwcCsrOwogICAgaWYocHA+PTEwKQogICAgICAgIHBwPTA7CiAgICBWKGNzKTsKICAgIFYocGNzKTsKICAgIFYocHBzKTsqLwogICAgVihwY3MpOwogICAgVihwcHMpOwogICAgLy8tLS0tLS0tLS0tLUNvbnN1bWVyLTEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIFAoY2NzKTsKICAgIFAocGNzKTsKICAgIFAoY3MpOwogICAgeD1idWZmW2NwXTsKICAgIGJ1ZmZbY3BdPTA7CiAgICBjb3V0PDwiYWZ0ZXIgY29uc3VtaW5nOiI8PGVuZGw7CiAgICBmb3IoaW50IGk9MDtpPDEwO2krKyljb3V0PDxidWZmW2ldPDwiXHQiOwogICAgY291dDw8ZW5kbDsKICAgIGNvdXQ8PHg8PGVuZGw7CiAgICBjcCsrOwogICAgaWYoY3A+PTEwKQogICAgICAgIGNwPTA7CiAgICBWKHBzKTsKICAgIC8qLy8tLS0tLS0tLS0tLUNvbnN1bWVyLTItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIFAoY2NzKTsKICAgIFAocGNzKTsKICAgIFAoY3MpOwogICAgeD1idWZmW2NwXTsKICAgIGJ1ZmZbY3BdPTA7CiAgICBjb3V0PDwiYWZ0ZXIgY29uc3VtaW5nOiI8PGVuZGw7CiAgICBmb3IoaW50IGk9MDtpPDEwO2krKyljb3V0PDxidWZmW2ldPDwiXHQiOwogICAgY291dDw8ZW5kbDsKICAgIGNvdXQ8PHg8PGVuZGw7CiAgICBjcCsrOwogICAgaWYoY3A+PTEwKQogICAgICAgIGNwPTA7CiAgICBWKHBzKTsKICAgIFYocGNzKTsKICAgIFYoY2NzKTsqLwogICAgVihwY3MpOwogICAgVihjY3MpOwogICAgcmV0dXJuIDA7Cn0K