Advertisement
Guest User

Untitled

a guest
Apr 30th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.37 KB | None | 0 0
  1. Καλησπέρα, για τη διαχείριση των jobs έχω σε κάθε pool μία δομή δεδομένων, στην οποία αποθηκεύω πέρα απο κάποια στοιχεία και το status των jobs (δηλαδή αν είναι suspended, active, finished). Αυτή η δομή ενημερώνεται σε κάθε loop, αφού έχω ελέγξει αν έχω κάποιο μήνυμα απο τον coord, και την χρησιμοποιώ για να απαντήσω σε ερωτησεις τύπου status, status-all, suspend κτλ. Η δομή του προγράμματος pool μου είναι η εξής:
  2.  
  3. while( συνθήκη τερματισμού )
  4. {
  5. /*1. διαβάζουμε απο το pipe για νέες εντολές και τις εκτελούμε*/
  6.  
  7. /*2. ενημερώνουμε τη δομή για τα νέα status των jobs*/
  8. }
  9. Πάνω σε αυτό έχω μία απορία. Ας υποθέσουμε ότι παίρνουμε απο τον coord για submit ένα job τύπου ls -l, δηλαδή ένα command που τελειώνει σχεδόν στιγμιαία . Τότε το pool θα εκτελέσει την πρώτη φάση του παραπάνω κώδικα, δηλαδη ένα fork/exec για να υλοποιήσει το ls -l και θα ενημερώσει τη δομή ότι είναι active. Αμέσως μετά, ελέγχει να δει άν τελείωσε το job, (2η φάση του κώδικα) και απο το waitpid για το συγκεκριμένο job process προκύπτει ότι είναι ακόμα active. Ωστόσο, αν αμέσως μετά το pool δεκτεί μία εντολή status για το συγκεκριμένο job, εισέρχεται πάλι στο πρώτο κομμάτι του κώδικα, κοιτάει τη δομή και απαντάει στον coord ότι είναι ακόμα active ενώ αυτή πραγματικά μπορεί να έχει τελειώσει. Προτείνετε να βάλω στο pool σε τέτοιες εντολές όπως η status και η status-all, να μην συμβουλεύεται τη δομή και να κάνει waitpid για να ναι πιο ακριβές ή ειναι ασήμαντος ένας τετόιος συγχρονισμος;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement