05. juni 2004 - 15:58
Der er
12 kommentarer og 1 løsning
Tråde i c++
Hej Jeg er ny i tråde, så jeg kunne godt bruge lidt hjælp. Hvorfor kan jeg ikke kompilere følgende kode med g++ kompileren? Tak AHR ******************** #include <iostream.h> #include <pthread.h> void* x() { cout<<"x"<<endl; } void* y() { cout<<"y"<<endl; } int main() { pthread_t xy; pthread_create(&xy, NULL, x, NULL); pthread_create(&xy, NULL, y, NULL); return 0; }
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Hvis du ændrer x og y til: void* x(void* a) { cout<<"x"<<endl; return NULL; } void* y(void* a) { cout<<"y"<<endl; return NULL; } og compiler på en platform som unerstøtter POSIX threads (læs: ikke windows), så bør det også compile.
Tak. Nu vil det kompileres men mine tråde skriver ikke x samt y ud på skærmen. Nogen der ved hvorfor? Jeg benytter cygwin samt g++ til kompilering. Tak AHR
Prøv at lade main thread vente indtil de 2 tråde har afsluttet.
Skriver jeg bare pthread_join; i min main virker det stadig ikke. Men jeg skal jo joine de trådene så der skal vel et eller andet mellem (). Altså pthread_join(xxxxx) Kan du hjælpe med det. Tak igen
void *retval; pthread_join(xy,&retval);
Koden ser nu sådan ud. Den kompilerer men udskriver ikke sætningerne. Nogen yderligere ideer. ******** #include <iostream.h> #include <pthread.h> void* x(void* a) { cout<<"x"<<endl; return NULL; } void* y(void* a) { cout<<"y"<<endl; return NULL; } int main() { pthread_t xy; pthread_create(&xy, NULL, x, NULL); pthread_create(&xy, NULL, y, NULL); void *retval; pthread_join(xy,&retval); return 0; }
Virker nu med følgende: #include <iostream.h> #include <pthread.h> void* x(void* a) { int b=0; while(b<10) { cout<<"x"<<endl; b++; } return NULL; } void* y(void* a) { int b=0; while(b<10) { cout<<"y"<<endl; b++; } return NULL; } int main() { pthread_t xy; pthread_create(&xy, NULL, x, NULL); pthread_create(&xy, NULL, y, NULL); pthread_join(xy,NULL); pthread_join(xy,NULL); return 0; }
05. juni 2004 - 20:29
#10
#include <pthread.h> #include <iostream> using namespace std; void *x(void *a) { cout << "x" << endl; return NULL; } void *y(void *a) { cout << "y" << endl; return NULL; } int main() { pthread_t xy1,xy2; pthread_create(&xy1, NULL, x, NULL); pthread_create(&xy2, NULL, y, NULL); void *retval1,*retval2; pthread_join(xy1,&retval1); pthread_join(xy2,&retval2); return 0; } virker fint hos mig. Det burde ikke gøre noget forskel om man skriver 1 eller 10 gange. Jeg har pyntet lidt ved at bruge 2 forskellige tråd referencer. Jeg tror iøvrigt ikke at cout er thread safe, så principielt burde der bruges en mutex.
16. juni 2004 - 22:08
#11
Tid at få lukket spørgsmålet ?
21. juni 2004 - 22:25
#12
?
25. juli 2004 - 23:18
#13
??
Kurser inden for grundlæggende programmering