Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа №33 / lab3 / lab3
.c#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;
}