Академический Документы
Профессиональный Документы
Культура Документы
Кафедра ВТ
Выполнила:
студентка гр. 8В51
Юнусова М.Р.
Проверил:
доцент каф. ВТ
Замятин А.В.
Томск 2008
Цель работы
Ознакомиться с подсистемой управления потоками в операционной системе Unix и
основными программными средствами для создания, управления и удаления потоков.
ofstream output;
ifstream input;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
const char* filename = "output.txt";
const int n = 5;
int main(){
srand(time(NULL));
pthread_join(GenThread, NULL);
pthread_join(SumThread, NULL);
pthread_mutex_destroy(&mutex);
}
void* Gen (void* arg){
for (int i = 0; i < n; i++){
pthread_mutex_lock(&mutex);
output.open(filename);
output<<(rand() % 100)<<" ";
output.close();
pthread_mutex_unlock(&mutex);
sleep(1);
}
}
ofstream output;
ifstream input;
sem_t semaphore;
const char* filename = "output.txt";
const int n = 5;
int main(){
srand(time(NULL));
sem_init(&semaphore, 0, 1);
pthread_join(GenThread, NULL);
pthread_join(SumThread, NULL);
sem_destroy(&semaphore);
}
Вывод программы:
23 58 70 98 71
sum = 320
int main(){
srand(time(NULL));
pthread_join(AdditionThread, NULL);
pthread_cancel(DivisionThread);
pthread_join(DivisionThread, NULL);
pthread_mutex_destroy(&pmutex);
pthread_cond_destroy(&pcond);
}
pthread_mutex_lock(&pmutex);
pthread_cond_signal(&pcond);
pthread_mutex_unlock(&pmutex);
sleep(1);
}
}
void* Division(void* arg){
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
pthread_mutex_lock(&pmutex);
while (true){
while (num % 2){
pthread_cond_wait(&pcond, &pmutex);
}
cout<<num<<" / 2 = ";
num /= 2;
cout<<num<<'\n';
}
pthread_mutex_unlock(&pmutex);
}
Вывод программы:
1+8=9
9 + 7 = 16
16 / 2 = 8
8/2=4
4/2=2
2/2=1
1 + 9 = 10
10 / 2 = 5
5+1=6
6/2=3
3 + 7 = 10
10 / 2 = 5
5+1=6
6/2=3
3+1=4
4/2=2
2/2=1
1 + 10 = 11
11 + 3 = 14
14 / 2 = 7
7 + 6 = 13
Выводы
В ходе выполнения лабораторной работы мною были изучены средства для создания,
удаления и синхронизации потоков. Синхронизация потоков может осуществляться
посредством семафоров, мьютексов и условных переменных. Мьютекс можно определить как
объект синхронизации, который устанавливается в особое сигнальное состояние, когда не
занят каким-либо потоком. В любой момент временем мьютексом может владеть только один
поток. Семафор предназначен для синхронизации потоков по действиям и по данным и в
общем случае способ использования семафора сходен со способом использования мьютексов.
Условная переменная позволяет потокам ожидать выполнения некоторого условия (события),
связанного с разделяемыми данными. Условная переменная всегда используется совместно с
мьютексом.