[ 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 Bezpečnosť a firewally

2

637

26.12.2008 2:40

Jaro

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

Pridanie programu do kontextovej ponuky

v Operačné systémy Microsoft

1

375

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 Technológia .NET

10

819

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

570

29.04.2017 10:26

JanoF

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

Unix Benchmarks

v Operačné systémy Unix a Linux

3

1501

08.02.2014 10:25

polo

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

Najpouzivanejsi unix/linux

v Operačné systémy Unix a Linux

28

4981

08.01.2008 15:51

Wheeler

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

IBM UNIX AIX

v Operačné systémy Unix a Linux

5

797

06.06.2008 22:39

FERDA23

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

unix a C

v Assembler, C, C++, Pascal, Java

8

1025

07.12.2008 21:34

Logik

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

Vypis argumentov - Csh - UNIX

v Assembler, C, C++, Pascal, Java

0

679

07.10.2007 16:32

SAmo

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

Unix pre desktopy - DesktopBSD

v Operačné systémy Unix a Linux

10

1072

08.06.2006 0:26

JanoF

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

unix time na normalny cas

v PHP, ASP

1

769

10.03.2007 22:08

p360t

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

hladame Support Specialist (Win, Unix)

v Ponuka práce

7

1084

05.12.2007 22:37

IT specialist

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

praca - linux alebo unix-like systemy

v Operačné systémy Unix a Linux

3

798

02.12.2008 18:14

jararak

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

Hladame Unix specialistov s plynulou Anglictinou

v Ponuka práce

0

449

03.05.2012 15:10

Rasto4

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

Hladam niekoho na konzultacie javy a Unix

v Ponuka práce

1

905

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 Operačné systémy Unix a Linux

28

7595

06.09.2023 22:10

89Aquarius



© 2005 - 2025 PCforum, edited by JanoF