Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Threads (Primzahlen ausgeben )

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.04.2015, 20:20 Uhr
koxp



Ich habe ein Problem das ich ohne Hilfe nicht lösen kann. Ich muss ein Programm in C schreiben welches Primzahlen findet und die dann ausgibt. Soweit so gut ist das auch geschafft.

Das Problem liegt darin das ich nun dieses Programm mit "threads" optimieren soll. Nur haben wir das Thema threads noch nicht behandelt und kenne auch die Befehle dafür nicht.

Ich weiß im großen und ganzem worum es geht und was threads sind aber wie ich sie verwenden soll ist mir ein Rätsel. Könnte mir da Jemand helfen ?

Die AufgabeStellung lautet so:
Write a Multi-Threaded Program in C that calculates for a given integer N
(N >= 2) the number of prime numbers in the interval 2..N . To optimize the
performance, your application shall use t threads in parallel. The parameters
N and t shall be passed to the application via the command line.
In addition, the current count of primes found shall be printed to the com-
mandline periodically every 0.5s.

Mein derzeitiger Code

C++:
#include <stdio.h>

int main()
{
    int grenze = 100;
    int zaehler;
    int i;
    
    printf ("2\n");

    for( zaehler = 3 ; zaehler <= grenze ; zaehler = zaehler + 2)
    {
        for ( i = 2 ; i <= zaehler ; i ++)
        {
            if ( zaehler%i == 0 )
            break;
        }
        
        if ( i == zaehler )
        
        printf("%d\n" , zaehler );
        
        }
    
    return 0;
}


-----
Edit: cpp-Tags eingefügt.

Dieser Post wurde am 14.04.2015 um 20:23 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.04.2015, 20:37 Uhr
Hans
Library Walker
(Operator)


Hi,

Zitat:
Nur haben wir das Thema threads noch nicht behandelt und kenne auch die Befehle dafür nicht.

Hä? - Das halte ich aber für ein Gerücht! - Aber egal. Threads sind immer abhängig vom verwendeten Betriebssystem, d.h. ein Programm, das sie unter Linux/Unix nutzt, läuft nicht ohne weiteres unter Windows und umgekehrt, weil die Threads in beiden Systemen unterschiedlich realisiert sind. Siehe hier.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 14.04.2015 um 20:38 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.04.2015, 20:41 Uhr
koxp



danke zunächst für die Antwort.

ja stimmt in der Angabe fehlen ein paar wichtige Punkte. Dieses Projekt behandeln wir in Zusammenhang mit Linux. So soll auch der Code im Linux Stil geschrieben werden.

Was mir schwer fällt ist , dass wir uns noch sehr wenig mit Linux auseinandergesetzt haben und jetzt so eine Programm verlangt wird. Deswegen der Aufruf um Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.04.2015, 21:02 Uhr
Hans
Library Walker
(Operator)


Hi,

Du meinst jetzt, dass Ihr Euch noch wenig mit der Programmierung von Linux auseinander gesetzt habt, oder? - Was den Prgrammierstil angeht, so gib mal "linux coding style" in der Suchmaschiene Deines Vertrauens ein, dann findest Du eine Menge dazu. Etwa das hier.
Und zu den Threads bist du in dem oben verlinketen Wikipediaartikel hoffentlich fündig geworden...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.04.2015, 22:19 Uhr
~koxp
Gast


ICh danke dir für deine antworten.

Richtig fündig geworden bin ich leider nicht. Das Program zu schreiben fällt mir nachwievor schwer.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.04.2015, 21:16 Uhr
Hans
Library Walker
(Operator)


Hi,

hm... also auf https://www.kernel.org/ sollte man eigentlich fündig werden. - Naja okay, man muss wahrscheinlich auch wissen, wonach man sucht...
Dann hätte ich noch dieses Buch vorzuschlagen:



C und Linux: Die Möglichkeiten des Betriebssystems mit eigenen Programmen nutzen von Martin Gräfe, Carl Hanser Verlag, 4. Auflage, 2010
ISBN: 978-3446421769

Im Klappentext steht u.a.:

Zitat:
...
Darauf aufbauend führt der Autor Sie anhand vieler praktischer Beispiele in diese Themen ein:
...
- Programme mit parallel laufenden Prozessen schreiben
...


Das ist, formal betrachtet, das übergeordnete Kapitel zum Thema Threads.

Am besten, erst mal in der Bibliothek Deines Vertrauens nachsehen, ob die es haben und dort ausleihen. Wenn Dir das nicht weiter hilft, dann weis ich auch nicht mehr weiter.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
16.04.2015, 20:32 Uhr
~koxp
Gast


Jz bin ich mal ziemlich voran gekommen habe aber noch ein Problem.

Ich hab das Gefühl das meine Threads nicht gleichzeitig laufen .
Wenn ich das PRogramm compiliere funktioniert es und es läuft auch aus, aber threads sind ja dazu da , damit die aufgerufene Fuktion gleichzeitig läuft . das tut sie aber nicht ?


C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <time.h>

int count = 0;
int pcount[100];
int primecount = 0;

struct sthread
{
    int min;
    int max;
};
struct sthread starray[1000];


void *primefun (void *x)
{
    
    int y = (int) x;
    int end = starray[y].max;
    int start = starray[y].min;
    int i;
    
    count = 0;
    
        printf("Worker %d : Ready for Service\n", y);
        printf("Starting Calculation from %d to %d\n", start, end);
    
for ( start; start <= end ; start++)
    {
        for ( i =2 ; i <= start; i++)
        {        
            if ( start%i == 0)
            break;    
        }
            if(i == start)
            {
                count++;
                primecount++;
            }
    }
    
     printf("Worker %d : found %d primes\n ", y , count);
    

    pthread_exit (NULL);
}

int main(int argc, char **argv)
{
    int j = 0;
    int helfer ;
    int tzahl = 0;
    int grenze = 10;
    int anfang = 2;
    int tid;
    pthread_t th[1000];
    
for( tzahl = 0; tzahl < 4; tzahl++)
{
    starray[j].max = (tzahl + 1) * (250000/4);
    
    starray[j].min = (tzahl * (250000/4)) + 1;
    
while (j < 4 )
{
    pthread_create(&th[j], NULL , primefun , j);
    pthread_join (th[j], NULL);
    j++;
    break;
    
}
}
    printf("\n%d Total primes found\n", primecount);    
return 0 ;
}



was habe ich da falsch gemacht?

Dieser Post wurde am 17.04.2015 um 10:18 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.04.2015, 08:18 Uhr
Tommix



'Morgen,
Du wartest per join bei jedem Thread bis er fertig ist, bevor Du den nächsten startest.

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: