Горю
Помогите с задачей, скоро здавать. Напишите двухпоточную программу. Главный поток случайно генерирует числа массива, например int a[2][10] Первый поток считает сумму элементов первой строки массива(и по мере возможности выписывает результат) Второй поток считает сумму элементов второй строки массива(и по мере возможности выписывает результат) Главный поток считает целую сумму(int) из частичных сумм определенных потоками выше(и по мере возможности выписывает результат)
Прим. Код программы массива на СИ можно менять, «жевать» и т.д. это не существенно
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand(time(NULL));
int a[2][10];
int i, j;
int row_sum = 0;
int total_sum = 0;
for (i = 0; i<2; i++)
{
for (j = 0; j<10; j++)
{
a[i][j] = rand() % 100 + 1;
}
}
for (i = 0; i<2; i++)
{
for (j = 0; j<10; j++)
{
row_sum += a[i][j];
total_sum += a[i][j];
}
printf("sum of the row %d = %d", i, row_sum);
row_sum = 0;
printf("\n");
}
printf("sum of the matrix = %d\n", total_sum);
return 0;
}
Прим. Код программ работы потоками , тоже можно менять,
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#define REENTRANT
int create_thread;
int connect_thread;
int disconnect_thread;
char bufor[BUFSIZ];
void koniec(char tekst[])
{
printf("%s",tekst);
exit(1);
}
void *rob()
{
printf("[watek] I am the thread of program.\n");
printf("Input data : ");
fgets(bufor,BUFSIZ,stdin);
// return bufor;
pthread_exit(0); //exit(0);
}
int main()
{
pthread_t id_watku;
printf("[system] Doing function PTHREAD_CREATE ...\n");
create_thread=pthread_create(&id_threadd,NULL,rob,&wat);
if (create_thread==-1) koniec("PORAZKA\n");
printf("[program] I am the main program.\n");
printf("[program] Waiting for data from my thread...\n");
printf("[system] Connecting thread ...\n");
connect_thread=pthread_join(id_threadd,NULL);
if (connect_thread==-1) koniec("PORAZKA\n");
printf("[program] Took data ... %s\n",bufor);
printf("[system] Disconnecting thread...\n");
disconnect_thread=pthread_detach(id_threadd);
if (disconnect_thread==-1) koniec("PORAZKA\n");
printf("[Program] End.\n");
exit(0);
}
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#define REENTRANT
int create_thread;
int connect_thread;
int disconnect_thread;
//Taking an arguments to thread by structure
typedef struct _Wat {
int nr;
int suma;
} Thread;
void* rob(void* _wat) {
Thread* wat = (Thread*)_wat;
printf("Thread get the %d, %d\n",wat->nr,wat->suma);
pthread_exit(0);
}
void koniec(char tekst[])
{
printf("%s",tekst);
exit(-1);
}
int main()
{
pthread_t id_threadd;
Thread wat;
wat.nr = 10;
wat.suma = 0;
printf("[system] Doing function PTHREAD_CREATE ...\n");
create_thread=pthread_create(&id_threadd,NULL,rob,&wat);
if (create_thread==-1) koniec("PORAZKA\n");
printf("[program] I am the main program.\n");
printf("[program] Waiting for data from my thread...\n");
printf("[system] Connecting thread ...\n");
connect_thread=pthread_join(id_threadd,NULL);
if (connect_thread==-1) koniec("PORAZKA\n");
printf("[system] Disconnecting thread...\n");
disconnect_thread=pthread_detach(id_threadd);
if (disconnect_thread==-1) koniec("PORAZKA\n");
printf("[Program] End.\n");
exit(0);
}