priest91 Δημοσ. 27 Μαρτίου 2011 Δημοσ. 27 Μαρτίου 2011 Πως γινεται να κανουμε απελευθερωση πορων ενος νηματος χωρις να το περιμενουμε(pthread_join()) να τερματισει αλλα με το μολις τελειωσει; Αν γινεται και ενα παραδειγμα.. Ευχαριστω..
parsifal Δημοσ. 27 Μαρτίου 2011 Δημοσ. 27 Μαρτίου 2011 χωρις να το περιμενουμε να τερματισει...αλλα με το μολις τελειωσει; Ποια είναι η διαφορά;
priest91 Δημοσ. 27 Μαρτίου 2011 Μέλος Δημοσ. 27 Μαρτίου 2011 main(){ while(1){ pthread_create(&t1,NULL,func1,NULL); //αν βαλω εδω μια pthread_join(), pthread_create(&t2,NULL,func2,NULL); για να δημιουργηθει το νημα 2 δε πρεπει να τερματισει η func1? εγω λεω να μη περιμενει να τερματισει η func1 και να φτιαξει το νημα 2 και οταν τελειωσει η func1 αυτοματα να αποδεσμευσει πορους...
parsifal Δημοσ. 27 Μαρτίου 2011 Δημοσ. 27 Μαρτίου 2011 Έχεις πλέξει δύο ερωτήματα σε ένα. Αλλά στην πραγματικότητα είναι δύο ξεχωριστά και άσχετα το ένα με το άλλο. Ερώτημα 1: Πώς γίνεται να ξεκινήσω πολλαπλά νήματα, χωρίς να χρειάζεται να περιμένω πρώτα το καθένα να τελειώσει; Απάντηση: Καλείς τις pthread_join σου στο τέλος, αφού έχεις δημιουργήσει όλα τα νήματα που θέλεις. Ερώτημα 2: Πώς κάνουμε απελευθέρωση πόρων ενός νήματος; Απάντηση: Για τους πόρους που χρησιμοποιεί το λειτουργικό σύστημα για διαχειριστικούς λόγους που έχουν να κάνουν με το νήμα καθεαυτό, δεν χρειάζεται. Όταν η ροή εκτέλεσης της func που έχει ανατεθεί στο νήμα τερματίσει, το λειτουργικό σύστημα καταστρέφει αυτόματα το νήμα και οι πόροι αποδεσμεύονται επίσης αυτόματα. Για τους πόρους που έχεις δεσμεύσει εσύ ρητά μέσα στον κώδικα της func, θα πρέπει να φροντίσεις ο ίδιος για την αποδέσμευσή τους πριν το τέλος της func. Ή να χρησιμοποιήσεις κάποια βιβλιοθήκη που παρέχει τέτοιου είδους αυτόματες ευκολίες (όπως smart pointers κλπ). Για παράδειγμα, αν έχεις ανοίξει με fopen ένα αρχείο και δεν το κλείσεις ρητά στο τέλος της func1, αυτό θα παραμείνει ανοικτό μετά την καταστροφή του νήματος.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.