Avatar billede thomasdideriksen Nybegynder
11. november 2002 - 21:40 Der er 4 kommentarer og
1 løsning

pthreads under solaris

Hej
Jeg har et spørgsmål til nedenstående kodestump:
Når jeg compiler med GCC under solaris (med -lpthread) og efterfølgende kører programmet ser det ud til at trådene afvikles sekventielt og IKKE parallelt som man vel burde forvente.
Jeg har prøvet at indsætte "busy-wait-delays" og øge REPEATS til højere tal, men ligegyldigt hvad jeg gør udskrives FØRST alle 1-tallerne og derefter alle 2-tallerne. Hvad skyldes dette??



#include <stdio.h>
#include <pthread.h>
#define REPEATS 1000


void threadProcess1(void){
  int i=0;
  for (i=0;i<REPEATS;i++){
    printf("1");
  }
  pthread_exit(NULL);
}


void threadProcess2(void){
  int j=0;
  for (j=0;j<REPEATS;j++){
    printf("2");
  }
  pthread_exit(NULL);
}


int main(void){
  printf("Thread creation...");
  pthread_create(NULL, NULL, (void*)threadProcess1, NULL);
  pthread_create(NULL, NULL, (void*)threadProcess2, NULL);
  printf("DONE\n");
  pthread_exit(NULL);
  return 0;
}
Avatar billede mbulow Nybegynder
11. november 2002 - 21:51 #1
Tjaa... Nu kan det vel ikke tage ret lang tid at udskrive 1000 1-taller, så mon ikke det er fordi at threadProcess1 bliver færdig med alle sine udskrifter før pthread_create overhoved når at oprette threadProcess2

Prøv at gør REPEATS en del større så de to tråde virkelig får noget at bestille og se om det hjælper på det
Avatar billede thomasdideriksen Nybegynder
11. november 2002 - 21:54 #2
har prøvet ... virker ikke.

Jeg har OGSÅ prøvet at indsætte BUSY-waits (altså tomme løkker der køres igennem en masse gange), men det virker HELLER ikke
Avatar billede dilleberg Nybegynder
11. november 2002 - 22:01 #3
Prøv at kalde Sleep() efter hver printf.

En god kompiler kan let finde på at fjerne tomme løkker.
Avatar billede thomasdideriksen Nybegynder
11. november 2002 - 22:05 #4
Det var DÉT der skulle til!!
mange tak!

dilleberg -> gider du poste svaret som et "svar" så du kan få dine point =)
Avatar billede dilleberg Nybegynder
11. november 2002 - 22:09 #5
OK :-)

Prøv at kalde Sleep() efter hver printf.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester