Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Список используемых источников




1. Баденко В. Л. Высокопроизводительные вычисления: учеб. пособие – СПб.: Изд-во Политехн. ун-та, 2010. – 180 с.

2. Таненбаум, Э. Распределенные системы. Принципы и парадигмы / М. ван Стеен. – СПб.: Питер, 2003. – 877с.

3. Андрианов С.Н., Дегтярев А.Б., Параллельные и распределенные вычисления. Часть1. – СПб.: «СОЛО», 2007. – 60 с.

4. Эндрюс, Г.Р. Основы многопоточного, параллельного и распределенного программирования.: Пер. с.англ. – М.: Издательский дом «Вильямс», 2003. – 512 с.: ил. – Парал. тит. англ.

5. Портал – ru.wikipedia.org. Статья: Oracle Solaris Studio – https://ru.wikipedia.org/wiki/Oracle_Solaris_Studio.

6. Портал – www.opennet.ru. Статья: Вышел набор компиляторов Oracle Solaris Studio 12.4 для Solaris и Linux – https://www.opennet.ru/opennews/art.shtml?num=32607.

7. Портал – http://www.oracle.com/technetwork/server-storage/developerstudio.

8. Дьяченко, С.В. Средства профилирования и анализа многопоточных приложений Oracle Studio Performance Analyzer / Г.А. Багдасаров: 2012. ­– 15 с.

9. Портал – http://bourabai.ru. Статья: Интегрированные среды разработки программ – http://bourabai.ru/einf/ide.htm.


 

Приложение А

Код приложения 1.

#include <stdlib.h>

#include <stdio.h>

#include <errno.h>

#include <pthread.h>

#include <unistd.h>

#include <malloc.h>

#include <semaphore.h>

 

int *mass;

int nom=0;

unsigned N=10;

sem_t semW,semR;

pthread_mutex_t lock;

void* funcR(void *arg)

{

int id_t=*(int *) arg;

printf(" Thread R %d Start \n",id_t);

while(1){

printf(" Thread R %d wait semaf\n",id_t);

sem_wait(&semR);

printf(" Thread R %d wait mutex\n",id_t);

pthread_mutex_lock(&lock);

if(nom>500){

pthread_mutex_unlock(&lock);

printf(" Thread R %d free mutex\n",id_t);

sem_post(&semW);

break;

}

for(int i=0;i<N;i++){

if(mass[i]==1) {

mass[i]=0;

break;

}

}

nom++;

printf(" Thread R %d wr 0\n",id_t);

pthread_mutex_unlock(&lock);

sleep(0.1);

printf(" Thread R %d free mutex\n",id_t);

sem_post(&semW);

printf(" Thread R %d free semaf\n",id_t);

}

}

void* funcW(void *arg)

{

int id_t=*(int *) arg;

printf(" Thread W %d Start \n",id_t);

while(1){

printf(" Thread W %d wait semaf\n",id_t);

sem_wait(&semW);

printf(" Thread W %d wait mutex\n",id_t);

pthread_mutex_lock(&lock);

if(nom>500){

pthread_mutex_unlock(&lock);

printf(" Thread W %d free mutex\n",id_t);

sem_post(&semR);

break;

}

for(int i=0;i<N;i++){

if(mass[i]==0) {

mass[i]=1;

break;

}

}

printf(" Thread W %d wr 1\n",id_t);

sleep(0.1);

pthread_mutex_unlock(&lock);

printf(" Thread W %d free mutex\n",id_t);

sem_post(&semR);

printf(" Thread W %d free semaf\n",id_t);

}

}

int main() {

pthread_t thR[4];

pthread_t thW[4];

int per;

mass=(int*) malloc(N*sizeof(int));

sem_init(&semW,0,3);

sem_init(&semR,0,0);

pthread_mutex_init(&lock,NULL);

for(int i=0;i<10;i++){

mass[i]=0;

}

for(int i=0;i<4;i++){

per = pthread_create(&thR[i],NULL, funcR,&i);

if(per!=0){

perror("error 111R");

return EXIT_FAILURE;

}

per = pthread_create(&thW[i],NULL, funcW,&i);

if(per!=0){

perror("error 111W");

return EXIT_FAILURE;

}

}

for(int i=0;i<4;i++){

pthread_join(thW[i],NULL);

pthread_join(thR[i],NULL);

}

free(mass);

pthread_mutex_destroy(&lock);

sem_destroy(&semW);

sem_destroy(&semR);

printf(" DONE\n");

return (EXIT_SUCCESS);

}

Приложение Б

Код программы 2.

#include <stdlib.h>

#include <stdio.h>

#include <errno.h>

#include <pthread.h>

#include <unistd.h>

 

pthread_mutex_t lock1;

pthread_mutex_t lock2;

int count=0;

 

void* thread_func1(void *arg)

{

int i;

int id_t=*(int *) arg;

printf(" Thread %d Start \n",id_t);

pthread_mutex_lock(&lock1);

pthread_mutex_lock(&lock2);

++;

//sleep(1);

pthread_mutex_unlock(&lock2);

pthread_mutex_unlock(&lock1);

sleep(1);

printf(" Thread %d Finish \n",id_t);

}

 

void* thread_func2(void *arg)

count

{

int i;

int id_t=*(int *) arg;

printf(" Thread %d Start \n",id_t);

pthread_mutex_lock(&lock2);

pthread_mutex_lock(&lock1);

count++;

sleep(1);

pthread_mutex_unlock(&lock1);

pthread_mutex_unlock(&lock2);

printf(" Thread %d Finish \n",id_t);

}

 

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

pthread_t th1,th2;

pthread_mutex_init(&lock1,NULL);

pthread_mutex_init(&lock2,NULL);

int id1=1,id2=2,result;

 

 

result = pthread_create(&th1,NULL, thread_func1,&id1);

if(result!=0){

perror("er 111");

return EXIT_FAILURE;

}

result = pthread_create(&th2,NULL, thread_func2,&id2);

if(result!=0){

perror("er 222");

return EXIT_FAILURE;

}

while(count<2){

;

}

 

/*

result= pthread_join(th1,NULL);

if(result!=0){

perror("join 111");

return EXIT_FAILURE;

}

result= pthread_join(th2,NULL);

if(result!=0){

perror("join 222");

return EXIT_FAILURE;

}*/

pthread_mutex_destroy(&lock1);

pthread_mutex_destroy(&lock2);

 

printf(" DONE\n");

return EXIT_SUCCESS;

}

 





Поделиться с друзьями:


Дата добавления: 2017-02-25; Мы поможем в написании ваших работ!; просмотров: 426 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Что разум человека может постигнуть и во что он может поверить, того он способен достичь © Наполеон Хилл
==> читать все изречения...

2526 - | 2336 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.