Void *funcT1(void *arg)
{
x
= x*5;
S1.Vsem();
}
Void *funcT2(void *arg)
{
y
= y+2;
S2.Vsem();
S2.Vsem();
}
void
*funcT3(void *arg)
{
S1.Psem();
S2.Psem();
x
= x + 2;
S3.
Vsem();
}
void
*funcT4(void *arg)
{
S2.Psem();
y=y-3;
S3.
Vsem();
}
void
*funcT5(void *arg)
{
S3.Psem();
S3.Psem();
y=x*y;
}
int
main(int arg, char *argv[])
{
S1.MonitorInit();
S2.MonitorInit();
S3.MonitorInit();
pthread_t
T1,T2,T3,T4,T5;
pthread_create(&T1,NULL,funcT1,NULL);
pthread_create(&T2,NULL,funcT2,NULL);
pthread_create(&T3,NULL,funcT3,NULL);
pthread_create(&T4,NULL,funcT4,NULL);
pthread_create(&T5,NULL,funcT5,NULL);
pthread_join(T1,
NULL);
pthread_join(T2,
NULL);
pthread_join(T3,
NULL);
pthread_join(T4,
NULL);
pthread_join(T5,
NULL);
cout<<"y
= "<<y<<'\n';
cin.get();
return
0;
}
Висновок:
В ході лабораторної роботи було
використано механізм умовних змінних
та моніторів для реалізації паралельних
алгоритмів, навчено вирішувати задачу
розподілу ресурсів, використовувати
глобальні інваріанти для аналізу та
розробки паралельних програм.