/* Fájlnév: term-fogy-termelo.c
   Az előadáson szereplő klasszikus termelő-fogyasztó problémára négy 
   fájlban adunk példát. 
   Ez a "termelő" program. Az inicilalizáló után indítható tetszőleges
   példányba. Célszerű a háttérben futtani, megjegyezni a pid-jét. 
   Végtelen ciklusban fut a saját időterében, SIGINT szignállal lehet
   terminálni. 
   Készítette: dr. Vadász Dénes
   2006. február
*/

#include "mysem.h"

main( ) {
int	id; 		/* A szemafor leírója */

	if ((id = semget(TFKEY, 3, 0)) < 0) {
		perror(" Nincs 'előkészítve' a raktár. ");
		exit(-1);
	}
	
	/* Végtelen ciklusban "termeljük" a terméket, majd betesszük a raktárba. */
	for(;;) {
		/* Felkészülünk a normális terminálódásra: SIGINT szignál
	   	   érkezése során exitálni kell. */
		signal(SIGINT, exit);

		printf(" Itt nem kritikus szakasza fut a %d termelőnek.\n",
					getpid( )); 		
		/* Itt a "belépési" szakasz. */
		semop(id, &termelo_be[0], 2);
			signal(SIGINT, SIG_IGN); /* A kritikus szakaszban ne! */
			printf(" A %d termelő belépett a raktárba. \n", 
					getpid( )); 
			sleep((int)(getpid( )%3)); 
		/* Itt a kilépés */
		semop(id, &termelo_ki[0], 2); 
	}
	
}

