Скачиваний:
15
Добавлен:
01.05.2014
Размер:
41.47 Кб
Скачать

Санкт-Петербургский Государственный Электротехнический

Университет «ЛЭТИ»

Кафедра МОЭВМ

Отчёт по лабораторной работе

«Средства синхронизации потоков и процессов в современных ОС».

Выполнил: Белов Д.А.

Группа : 3341

Санкт-Петербург

2006 г.

Постановка задачи.

Задача : Есть n-машин(потоков) .Стартуют, первая машина(поток) добравшаяся до финиша, захватывает мьютекс. Генератор запуска потока-случайный(рандом).

Мьютекс – это синхронизирующий объект, использование которого позволяет множеству потоков управления упорядочить доступ к разделяемым данным. Название этого средства синхронизации отражает его функциональность – взаимное исключение (mutual-exclusion). Поток захватывает мьютекс в монопольное владение и остается владельцем, пока сам же его не освободит.

Текст программы.

Файл 3.с :

#include <pthread.h>

#include <stdio.h>

#include <stdlib.h>

#include <semaphore.h>

int number; //kol –vo mashin

int *thread_id; // id-potoka

pthread_mutex_t mutex; //muteks

pthread_attr_t attr; //attr

sem_t sem; //sem

void init() {

pthread_mutex_init( &mutex, NULL );//inicializiruem muteks

pthread_attr_init( &attr ) ; //inicializiruem atrebut

pthread_attr_setdetachstate( &attr, PTHREAD_CREATE_JOINABLE );//delaem atr. - JOINABLE

}//init

void* finish ( void* unused ){

int i = (int *) unused;//polu4aem peredanii parametr v funkciy

pthread_mutex_lock( &mutex );//lo4im muteks

printf(">>>>>>>>%i: finish\n", i);//priwla mawinka na finiw i zaxvatila muteks

pthread_mutex_unlock( &mutex );//unlo4im nuteks

}//finish

int main( int argc, char *argv[] ) {

number = atoi( argv[1] );//polu4aem kol. mawinok iz komandnoi stroki

int iRand,

h, temp,

flag;// neobhodim v cikle povtorov

pthread_t thread[number];// indefekator novogo potoka

int *notRepeat = (int*) malloc(number*sizeof(int));//massiv-proverka, 4to randomon ne sozdana povtorno mawinka(t.e. kotoruy on do etogo sozdal)

init();

for( h=0; h<number; h++) {//cikl dl9 sozdani9 vsex mawinok

while( flag != 1 ) {

flag = 1;

iRand = 0 + random()%(number-0+1); // eto - random, gde ni*n99 granica -0

//a verxn99 - NUMBER, t.e. to 4islo 4to mi vveli v konsole

for( temp=0; temp<h ; temp++ ) // proverka ne povtor9las li mawinka na starte

if ( iRand == notRepeat[temp] )

flag = 0;

}

notRepeat[h] = iRand; //zapaminaem 4to za miwinka startanula

flag =0;

printf("%i: car starting\n", iRand);

pthread_create( &(thread[iRand]), &attr, finish, iRand ); //sozdaem nitku

}

pthread_mutex_destroy( &mutex );//ubivaem nuteks

pthread_attr_destroy( &attr ); //ubivaem atrebut

pthread_exit(NULL);// dl9 togo 4tobi vse nitki *dali poka posledn99 ne otrabotaet, i tolko togda prekratits9 rabota programmi

}//main

Источники:

Средства синхронизации потоков управления: версия для печати и PDA

http://www.intuit.ru/department/se/posix2/2/posix2_2.html

Вывод:

разработанная программа фукцианирует корректно и удовлетворяет заданным требованиям.

Соседние файлы в папке Лабораторная работа №32