Πώς σε: Non-Blocking πρόσβαση σηματοφόρων σε πέσος Φιλιππίνων
Ο σηματοφόρος χρησιμοποιείται για να περιορίσει την πρόσβαση στους κοινούς πόρους, όπως η κοινή μνήμη ή για να περιορίσει τον αριθμό διαδικασιών που μπορεί ταυτόχρονα να χρησιμοποιήσει έναν πόρο, σε μια πολυ-διαδικασία ή ένα πολύπλοκο περιβάλλον.
Σε πέσος Φιλιππίνων που χρησιμοποιούν το σηματοφόρο μια διαδικασία πρέπει να περιμένει έχοντας πρόσβαση σε έναν κοινό πόρο που χρησιμοποιείται αυτήν την περίοδο με μια άλλη διαδικασία. Αλλά αυτό δεν μπορεί να απαιτηθεί για όλες τις περιπτώσεις. Μερικές φορές πρέπει ακριβώς να ελέγξουμε εάν ένας πόρος έχει κλειδωθεί και κίνηση επάνω. Δυστυχώς δεν έχουμε κανέναν τρόπο να ελέγξουμε τη θέση μιας κλειδαριάς σηματοφόρων σε πέσος Φιλιππίνων. Δείτε πώς μπορούμε να εφαρμόσουμε τη non-blocking πρόσβαση σηματοφόρων σε πέσος Φιλιππίνων.
Δεδομένου ότι η βιβλιοθήκη σηματοφόρων δεν μας δίνει τι χρειαζόμαστε θα πρέπει να χρησιμοποιήσουμε την ύπαρξη αρχείων ως κλειδαριά αντ' αυτού. Η έννοια και η εφαρμογή είναι απλές:
1. Πρίν έχετε πρόσβαση σε έναν κοινό πόρο πρέπει να ελέγξετε εάν ένα προκαθορισμένο αρχείο (πέστε .lock) υπάρχει και ο χρόνος τροποποίησης αρχείων δεν υπερβαίνει σταθερό (διαμορφώσιμος) λήγει χρόνος. Ο δεύτερος όρος απαιτείται για να ανακτήσει από τις παλαιές κλειδαριές που δεν έχουν καθαριστεί λόγω της απότομης λήξης της προηγούμενης διαδικασίας ή άλλων λόγων.
2. Εάν καθένας του όρου δεν ικανοποιεί στο βήμα 1 έπειτα δημιουργήστε ή τροποποιήστε το αρχείο κλειδαριών και χρησιμοποιήστε τον κοινό πόρο. Αφότου γίνεστε, πρέπει να διαγράψετε το αρχείο κλειδαριών για να επιτρέψετε την επόμενη πρόσβαση του κοινού πόρου. Η διαγραφή πρέπει να γίνει ανεξάρτητα από οποιοδήποτε όρο λάθους στα πιό αρχικά στάδια με τον κατάλληλο χειρισμό εξαίρεσης/λάθους των προηγούμενων βημάτων για να αποτρέψει την απότομη λήξη.
3. Εάν και οι δύο όροι ικανοποιούν έπειτα ο πόρος έχει κλειδωθεί και μη διαθέσιμος αυτήν την περίοδο. Τώρα μπορείτε είτε να περιμένετε και να ελέγξετε περιοδικά σε έναν βρόχο με τον ύπνο είτε να κινηθείτε προς τους επόμενους στόχους.
Αφήστε να εξετάσει το πώς μπορούμε να εφαρμόσουμε αυτό με τον κώδικα δειγμάτων:
εάν (file_exists («.lock») && ((χρόνος () - filemtime (» .lock ")) < 1800="">
_ Filed κατώτερος τίτλος είδηση, πέσος Φιλιππίνων, προγραμματίζω |
|
RSS 2.0 |
Trackback αυτό το άρθρο |
Ηλεκτρονικό ταχυδρομείο αυτό το άρθρο
Μπορείτε επίσης να επιθυμήσετε να διαβάσετε |


Προσθέστε στις συμπάθειες Technorati

































