Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Государственное образовательное
учреждение высшего профессионального образования
«ТОМСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
ЛАБОРАТОРНАЯ РАБОТА №3
по дисциплине
«Операционные системы»
Выполнил:
Студент группы 8В51 _________ М. С. Гриценко
Руководитель:
_________ А. В. Замятин
Томск – 2008
2
Цель: ознакомиться с подсистемой управления потоками в операционной
системе Unix и основными программными средствами для создания, управления и
удаления потоков.
Задание: изучить основные программные средства управления потоками ОС
Unix, а также способы синхронизации потоков с использованием мьютексов. Раз-
работать приложение для многопоточных вычислений с использованием синхро-
низации посредством мьютексов, семафоров и условных переменных.
Ход работы
1. Ознакомились с теоретическим материалом
2. В качестве основной задачи используем: увеличение общей переменной
двумя потоками: случайное количество увеличений на случайную величину
каждым потоком.
3. С использованием мьютексов :
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#define max 10
pthread_mutex_t mutex;
int sum = 0;
int add;
pthread_mutex_init(&mutex, NULL);
int t =1;
3
pthread_create(&func1, NULL, myfunc,(void *)&t );
t++;
pthread_create(&func2, NULL, myfunc,(void *)&t );
pthread_join(func1, NULL);
pthread_join(func2, NULL);
printf("processes was done\n");
printf("the sum is %d\n", sum);
pthread_mutex_destroy(&mutex);
return EXIT_SUCCESS;
}
4. С использованием семафоров :
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <semaphore.h>
#define max 10
sem_t semaphore;
int sum = 0;
int add;
int t =1;
pthread_create(&func1, NULL, myfunc,(void *)&t );
t++;
pthread_create(&func2, NULL, myfunc,(void *)&t );
pthread_join(func1, NULL);
pthread_join(func2, NULL);
printf("processes was done\n");
printf("the sum is %d\n", sum);
return EXIT_SUCCESS;
}
int sum = 0;
int add;
pthread_mutex_init(&mutex, 0);
pthread_cond_init(&cond, 0);
int t =1;
pthread_create(&func1, NULL, myfunc,(void *)&t );
t++;
pthread_create(&func2, NULL, myfunc,(void *)&t );
sleep(1);
pthread_mutex_lock(&mutex);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
pthread_join(func1, NULL);
pthread_join(func2, NULL);
printf("processes was done\n");
printf("the sum is %d\n", sum);
return EXIT_SUCCESS;
}