Скачиваний:
12
Добавлен:
01.05.2014
Размер:
1.58 Кб
Скачать
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <time.h>


const int full_barrel = 20;
static int barrel = 0;
static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;

static void *bear(void *arg)
{	
	srand(time);
	unsigned int rnd;
	while (barrel >= 0)
	{	if (barrel == 0)
		{	
			rnd = rand()%10;
 	                printf("Медведь проснулся, не нашел мед и голодный пошел спать\n");
                        sleep(rnd);
		}
		else
		{	
			pthread_mutex_lock(&mtx);
			rnd = rand()%20;
			printf("Медведь проснулся, съел весь мед и сытый пошел спать\n");
			barrel = 0;
			pthread_mutex_unlock(&mtx);
		  	sleep(rnd);
		}
	}
}


static void *bee(void *arg)
{	unsigned int rndm;
        while (barrel >= 0)
        {	
		if (barrel < full_barrel)
		{	
			pthread_mutex_lock(&mtx);
			rndm = rand()%10;
			barrel++;
                        printf("Пчелка %d принесла мед\n",pthread_self());
			pthread_mutex_unlock(&mtx);
                        sleep(rndm);
		}
		else
		{
			printf("Боченок полон, пчелка может отдохнуть\n");
			sleep(20);		
	
		}
        }
}


int main(int argc, char** argv)
{	
	pthread_t tid;
	int i;
	pthread_attr_t q = {0};
        for (i=0;i<atoi(argv[1]);i++)
	{	
		pthread_create(&tid, &q ,bee, NULL);
        }	
	pthread_create(&tid, &q ,bear, NULL);
        while ( barrel < full_barrel )
	{
		printf("Пчеловод проверяет бочку %d\n",barrel);
		sleep(5);
	}
	return 0;
}
Соседние файлы в папке lab3