Forum: PC-Programmierung pThread segmentation fault


von Harald (Gast)


Lesenswert?

Hi
Ich versuche gerade mit pThreads ein Program zu schreiben und habe ein 
Problem damit. Immer wenn ich den folgenden Code ausführen will erhalte 
ich einen segmentation fault. Dies ist aber nur der Fall wenn ich im 
Main ein Join am Schluss mache. Wenn ich das Join weglasse funktioniert 
der Code. Daher würde es mich interessieren ob sich das jemand erklären 
kann. Danke im Vorhinein für alle Antworten.

Mfg Harald
1
#include <pthread.h>
2
#include <stdio.h>
3
4
void* worker1(void* i)
5
{
6
  printf("WORKER1: Worker1 starts successfully\n");
7
  return;
8
};
9
10
int main()
11
{
12
  pthread_t worker1;
13
  int i = 0;
14
15
  if((pthread_create(&worker1, NULL, (void*)worker1, (void*)i)) != 0)
16
  {
17
    printf("MAIN: Error during creation of worker1\n");
18
    return 1;
19
  }
20
  
21
  printf("MAIN: Threads created!\n");     
22
23
  pthread_join(worker1, NULL);
24
  printf("MAIN: Threads joined.\n");
25
  
26
  return 0;
27
}

von Peter II (Gast)


Lesenswert?

könnte es sein das der compiler ein Problem bekommt das du eine Variabel 
und eine Funktion mit dem gleichen name hast - ich bekommt da zu mindest 
welche.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Genau, statt der Adresse der Funktion worker1 übergibst du die (nicht 
initialisierte) Variable worker1.

von Rolf Magnus (Gast)


Lesenswert?

Im übrigen haben die Casts da nichts zu suchen. Ohne die bekommst du es 
vermutlich nicht durch den Compiler, aber das hätte dir ein Zeichen sein 
sollen, daß da was falsch ist. Mit einem Cast bekommst du den Compiler 
immer irgendwie ruhiggestellt, denn damit sagst du ihm: "Ich weiß, daß 
das für dich unsinnig aussieht, aber ich weiß was ich tue, also mach 
einfach". Wenn du dann aber nicht weißt, was du tust, kommt dabei mit 
hoher Wahrscheinlichkeit ziemlicher Unsinn raus. Deshalb einen Cast nur 
dann verwenden, wenn du ganz genau weißt, warum du ihn brauchst!

von Harald (Gast)


Lesenswert?

Hi

DANKE für die Hilfe und ja das mit den Namen war der Fehler. Ich glaube 
ich hätte noch Stunden den Code anschauen können und hätte den Fehler 
nicht gefunden.

Mfg Harald

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.