Informace Fórum Stav sítě ČVUT IDS Hledání Přihlášení Mapa stránek

Vlákna - C


/*^*************************************************************/
/*                                                             */
/*  Ukazka pouziti vice vlaken                                 */
/*                                                             */
/*  Program vygeneruje pole nahodnych cisel a ty potom secte.  */
/*  Scitani je rozdeleno mezi nekolik vlaken.                  */
/*                                                             */
/*  Program se prelozi prikazem                                */
/*  cc -lpthread -ovlakna vlakna.c                             */
/*                                                             */
/***************************************************************/
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/thread.h>
#include <unistd.h>
#include <errno.h>

#define MAX_THR 4 
 /* pocet vlaken */
#define MAX_DATA 10000000

extern int errno;
typedef struct param { /* struktura parametru predavanych vlaknum */
  int i;
  int index1, index2;
};

int data[MAX_DATA];/* scitana data */
pthread_t thr[MAX_THR]; /* identifikatory vlaken */
struct param thr_param[MAX_THR]; /* pole pro predani parametru vlaknum */
int mezisoucet[MAX_THR]; /* pole pro vraceni vysledku vlakny */

/* cinnost jednoho vlakna */
void *thr_routine(void *arg) {
  int i,j;
 pthread_t tid;
  tid = pthread_self(); 
  printf("Vlakno #%i (tid %i) pocita indexy %i az %i\n",
    ((struct param*)arg)->i,tid,
    ((struct param*)arg)->index1, ((struct param*)arg)->index2);
 
  /* secti cast dat */
  for(j = 1; j<=100; j++){ 
  mezisoucet[((struct param*)arg)->i]=0; 
  for(i=((struct param*)arg)->index1; i<((struct param*)arg)->index2; i++) {
    mezisoucet[((struct param*)arg)->i]+=data[i];
  }
  }
  printf("Mezisoucet vlakna #%i je %i\n", ((struct param*)arg)->i,
    mezisoucet[((struct param*)arg)->i]);
  return;
}

main() {
  clock_t zac, konec;
  int err, i;
  unsigned int seed;
  void *status;
 pthread_attr_t attr;
  int soucet;

 zac = clock();

  /* vygeneruj nahodna data*/ 
  for(i=0; i
Jednoduché příklady