LINUX.ORG.RU

Сообщения yovosiw533

 

Горю

Помогите с задачей, скоро здавать. Напишите двухпоточную программу. Главный поток случайно генерирует числа массива, например 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);
  }

 ,

yovosiw533
()

RSS подписка на новые темы