Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Отчет_ompimpod8

.doc
Скачиваний:
11
Добавлен:
15.04.2015
Размер:
122.88 Кб
Скачать

}

if(state1==false | state2==false | state3==false)errCount++;

if(errCount>0){send(sockets[sockets_index[k]], "Errors found", strlen("Errors found"), 0);}

else {send(sockets[sockets_index[k]], "Errors not found", strlen("Errors not found"), 0);}

close(sockets[sockets_index[k]]);

sockets[sockets_index[k]]=-1;

pthread_mutex_unlock( &mutexs[k] );

break;

}

}

}

static void *ini(void *arg)

{

for(int j=0; j<10; j++)

{

pthread_mutex_init(&mutexs[j],NULL);

}

}

int main()

{

pthread_t initial;

pthread_create(&initial,NULL , ini, NULL);

pthread_join(initial,NULL);

char *c1=new char[2];

for(int j=0; j<10; j++)

{

c1=new char[2];

sprintf(c1,"%d",j);

pthread_mutex_lock( &mutexs[j] );

pthread_create(&threads[j],NULL , funct, c1);

statesthread[j]=false;

}

int sock, listener;

sockaddr srvr_name;

int bytes_read;

memset(sockets,-1,sizeof(sockets));

listener = socket(AF_UNIX, SOCK_STREAM, 0);

if(listener < 0)

{

perror("socket");

return 0;

}

srvr_name.sa_family = AF_UNIX;

strcpy(srvr_name.sa_data, "socket.soc");

if(bind(listener, &srvr_name, sizeof(srvr_name)) < 0)

{

perror("bind");

return 0;

}

listen(listener, 40);

pthread_t fun;

fflush(stdin);

bool flag=true;

bool flag2;

int i,k,k2;

while(1)

{

flag=true;

for(i=0; i<sizeof(sockets)&&flag==true; i++)

{

if(sockets[i]==-1)

{

flag=false;

k=i;

}

}

if(flag==false)

{

sockets[k] = accept(listener, NULL, NULL);

if(sockets[k] < 0)

{

perror("accept");

return 0;

}

flag2=true;

for(int j=0; j<10&&flag2==true; j++)

{

if( statesthread[j]==false)

{

statesthread[j]=true;

flag2=false;

k2=j;

}

}

if(flag2==false)

{

sockets_index[k2]=k;

pthread_mutex_unlock( &mutexs[k2] );

}

}

}

return 0;

}

Вывод: В ходе выполнения данной лабораторной работы была разработана многопоточное приложение, выполняющее решение поставленной задачи.

20