neo_fox Napisano Listopad 30, 2005 Zgłoszenie Share Napisano Listopad 30, 2005 Próbuje sobie poćwiczyć z wątkami. Napisałem coś takiego: #include <iostream> #include <pthread.h> using namespace std; void* thread1(void*) { cout << "Thread" << endl; return NULL; } int main() { pthread_t tid; pthread_create(&tid, NULL, thread1,NULL); for(int x = 0; 100; x++) { cout << x << endl; } pthread_exit(&tid); return 0; } Kompiluje się bez problemu ale przy uruchomieniu mam: Program has been terminated receiving signal 11 (Segmentation fault) Wie ktoś może w czym leży problem? OK już mam Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
m_zaleczny Napisano Grudzień 4, 2005 Zgłoszenie Share Napisano Grudzień 4, 2005 I co było przyczyną? U mnie program poprawnie się skompilował i uruchomił bez żadnych błędów. Jedynym mankamentem był fakt, że wpadł w nieskończoną pętlę i wypisywał kolejne liczby naturalne Przyczyną był warunek końca pętli for. Powinno być: for(int x = 0; x < 100; x++) Napisz co było przyczyną segfolta. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
neo_fox Napisano Grudzień 6, 2005 Autor Zgłoszenie Share Napisano Grudzień 6, 2005 Niekończąca się pętla była zamierzona. Program miał/ma wyglądać w efekcie tak: #include <iostream> #include <pthread.h> using namespace std; void* thread1(void*); void* controlThread(void*); bool end = false; bool wait = false; int main() { pthread_t tid1, tid2; cout << "Press [x] to end the program" << endl; pthread_create(&tid1, NULL,thread1,(void*)"I'm thread number 1"); // utwórz wątek główny pthread_create(&tid2, NULL, controlThread, NULL); // utwórz wątek kontrolny pthread_exit(&tid1); pthread_exit(&tid2); return 0; } void* thread1(void* arg) { for(int x = 0; true;x++) { if(wait == false) { cout << (char*)arg << " my counter is: " << x << endl; sleep(1); // uśpij na sekundę aby zwolnić tempo } else { sleep(1); x--; } if(end == true) break; } return NULL; } void* controlThread(void*) { char in,conf; do { cin >> in; if(in == 'x' || in == 'X') { wait = true; cout << "Really? y/n" << endl; cin >> conf; if(conf == 'y' || conf == 'Y') end = true; else wait = false; } } while(end == false); return NULL; } A błąd zniknął po użyciu dodatkowego przełącznika: g++ -o simple simple.cpp -Wno-deprecated -lpthread[/B] Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się