//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 procX

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 *BufferA,*BufferB;
	shid = shm_get(123,(void**)&BufferA,20*sizeof(char));
	shid2 = shm_get(456,(void**)&BufferV,20*sizeof(char));
	/*produce an item*/
	for (i=0;i<500;i++)
	{
		if(i%50==0)
		{
			sleep(1);
		}
		sprintf(item,"xx",i);
		sem_wait(empty);
		sem_wait(mutex);
		/*add item to buffer*/
		BufferA = 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;
}

