//CSE 660
//Jason Kim
//Lab 3

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <iostream>
#include <signal.h>
#include <wait.h>
#include "sshm.h"
#include "ssem.h"

using namespace std;

//code of procY

int main()
{
	int i,full,empty,mutex,shid,shid2;
	//get semid
	full = sem_open(1);
	mutex = sem_open(2);
	empty = sem_open(3);
	char *item;

	//open memory
	char *BufferY;
	char *BufferX;
	shid=shm_get(456,(void**)&BufferY,40*sizeof(char));
	shid2=shm_get(123,(void**)&BufferB,20*sizeof(char));
	/*produce an item*/
	for (i=0;i<345;i++)
	{
		if(i%65==0)
		{
			sleep(3);
		}
		sprintf(item,"BAB",i);
		sem_wait(empty);
		sem_wait(mutex);
		/*add item to buffer*/
		BufferY = item;
		sem_signal(mutex);
		sem_signal(full);

	}
	//remove shared memories
	shm_rm(shid);
	shm_rm(shid2);


	//remove semaphores
	sem_rm(full);
	sem_rm(mutex);
	sem_rm(empty);

	return 0;

}

