[ Príspevkov: 2 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.04.14
Prihlásený: 25.05.14
Príspevky: 1
Témy: 1 | 1
NapísalOffline : 22.04.2014 16:34 | UNIX - Pridanie vlákien do programu.

Chcel by som sa opýtať či by mi nevedel niekto pomôcť s týmto kódom, potrebujem tam pridať minimálne 5 vlákien kde napríklad prvých 100 prvocisel bude počítať jedno vlákno, dalších 100 prvočísel druhé vlákno, dalsich 100 prvočisel tretie vlákno... atď. Ďakujem za pomoc.


Kód:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

void *runner(void *param); /* the thread */

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

   //Verify two args were passed in
   if(argc < 2) {
      fprintf(stderr, "USAGE: ./prime.out <Integer value>\n");
      exit(1);
   }

   //verify the input is greater then or equal to two
   if(atoi(argv[1]) < 2) {
      fprintf(stderr, "USAGE: %d must be >= 2\n", atoi(argv[1]));
      exit(1);
   }

   pthread_t tid;       //Thread ID
   pthread_attr_t attr; //Set of thread attributes

   printf("Prime Numbers: ");

   //Get the default attributes
   pthread_attr_init(&attr);
   //Create the thread
   pthread_create(&tid,&attr,runner,argv[1]);
   //Wait for the thread to exit
   pthread_join(tid,NULL);
   printf("\nComplete\n");
}

//The thread will begin control in this function
void *runner(void *param) {
   int i,j,upper = atoi(param);
   /* Check to see if a number is prime */
   for(i = 2; i < upper; i++) {
   int trap = 0;
      /* Check each number for divisibility */
      for(j = 2; j < i; j++) {
         int result = i % j;
         /* If any of the numbers divide cleanly
             then this number is not prime. So
             stop checking. */
         if(result == 0) {
            trap = 1;
            break;
         }
      }
      //No numbers divided cleanly so this number must be prime
      if(trap == 0) {
         printf("[%d] ", i);
      }
   }
   //Exit the thread
   pthread_exit(0);
}


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 22.04.2014 17:10 | UNIX - Pridanie vlákien do programu.

1.) Čo ti bráni vytvoriť tých vlákien viac? Proste spravíš 5 krát pthread_t a zavoláš 5 krát pthread_create. Rozsah čísel, ktoré má vlákno spracovať, mu dáš ako dáta - nedáš mu len argv[1], ale trebárs štruktúru s dvomi číslami.

2.) Vo funkcií runner si máš dáta správne pretypovať. Kompiler C-čka to síce skompiluje, pretože to používaš ako pole bajtov, ale aj tak to nie je úplne dobre a ak tomu predáš štruktúru, to pretypovanie tam potrebovať budeš.

3.) Toto nie je úplne dobrý prístup k paralelizácií výpočtu prvočísel menších než N. Skôr sa hodí prístup, kedy beží cyklus do N a vlákna testujú jednolivé čísla len na to, či je to prvočíslo, alebo nie. Ani si nie som teraz istý, či ti tento algoritmus pôjde nejako normálne upraviť tak, aby testoval len nejaký interval. No veď skús, ale určite by som to prepísal a minimálne použil nejakú funkciu is_prime s nejakým krajším algoritmom na zistenie prvočíselnosti.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
 [ Príspevkov: 2 ] 


UNIX - Pridanie vlákien do programu.



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Pridanie programu do Firewallu

v Firewally a bezpečnosť

2

668

26.12.2008 2:40

Jaro

V tomto fóre nie sú ďalšie neprečítané témy.

Pridanie programu do kontextovej ponuky

v Windows

1

401

17.11.2008 19:46

Gyrxiur

V tomto fóre nie sú ďalšie neprečítané témy.

pridanie suboru do programu a jeho pouzitie

v Backend

10

857

30.01.2011 14:22

dartanan

V tomto fóre nie sú ďalšie neprečítané témy.

Tower Server - 16 jadier / 32 vlákien - do 1500€

v PC zostavy

8

600

29.04.2017 10:26

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

unix a C

v Backend

8

1067

07.12.2008 21:34

Logik

V tomto fóre nie sú ďalšie neprečítané témy.

Najpouzivanejsi unix/linux

v Unix-like systémy

28

5029

08.01.2008 15:51

Wheeler

V tomto fóre nie sú ďalšie neprečítané témy.

IBM UNIX AIX

v Unix-like systémy

5

835

06.06.2008 22:39

FERDA23

V tomto fóre nie sú ďalšie neprečítané témy.

Vypis argumentov - Csh - UNIX

v Backend

0

722

07.10.2007 16:32

SAmo

V tomto fóre nie sú ďalšie neprečítané témy.

Unix pre desktopy - DesktopBSD

v Unix-like systémy

10

1113

08.06.2006 0:26

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

hladame Support Specialist (Win, Unix)

v Ponuka a dopyt práce

7

1147

05.12.2007 22:37

IT specialist

V tomto fóre nie sú ďalšie neprečítané témy.

unix time na normalny cas

v Backend

1

803

10.03.2007 22:08

p360t

V tomto fóre nie sú ďalšie neprečítané témy.

Hladame Unix specialistov s plynulou Anglictinou

v Ponuka a dopyt práce

0

502

03.05.2012 15:10

Rasto4

V tomto fóre nie sú ďalšie neprečítané témy.

praca - linux alebo unix-like systemy

v Unix-like systémy

3

830

02.12.2008 18:14

jararak

V tomto fóre nie sú ďalšie neprečítané témy.

Hladam niekoho na konzultacie javy a Unix

v Ponuka a dopyt práce

1

943

09.01.2009 21:15

Skorpikon

V tomto fóre nie sú ďalšie neprečítané témy.

Stranky so zameranim na linux a unix

v Unix-like systémy

28

7686

06.09.2023 22:10

89Aquarius

V tomto fóre nie sú ďalšie neprečítané témy.

Konvertovanie UNIX casu do DAYS / HOURS / MINUTES / SECONDS

v Backend

2

473

24.07.2010 19:18

stenley



© 2005 - 2026 PCforum, edited by JanoF