Παράλληλη Αναζήτηση

Αναζήτηση

Βρες
Εμφάνιση

Διεθνή :: Ανεπτυγμένη είδηση-λόγος

( αφαίρεση άδειας σε όσους επιλέγουν πελάτες :: 1/3/2006 19:32:24) 

Η πρόταση του Μπ. Μπαρμπουνάκη προέκυψε μετά από δημοσίευμα της "Μ".

ΕΛΕΓΧΟΙ

Το πρόβλημα των αναγνωστών και συγγραφέων

Μ. ΜΠΑΡΜΠΟΥΝΑΚΗΣ

Πρόστιμα σε Τρίκαλα, Παναχαϊκή

Στις βάσεις δεδομένων (databases) παρουσιάζεται ένα πολύ συνηθισμένο πρόβλημα αμοιβαίου αποκλεισμού διεργασιών, το πρόβλημα των αναγνωστών και συγγραφέων.

Αφαίρεση άδειας σε όσους επιλέγουν πελάτες

Οι ήδη υποβιβασμένες ΠΑΕ της Παναχαϊκής και των Τρικάλων είναι αυτές που τιμωρήθηκαν από την Επιτροπή Επαγγελματικού Αθλητισμού, γιατί δεν κατέθεσαν εγγυητικές επιστολές. Μια ομάδα διεργασιών μοιράζεται ένα αρχείο, στο οποίο άλλες διεργασίες θέλουν να γράψουν και να το τροποποιήσουν, ενώ άλλες θέλουν μόνο να διαβάσουν από αυτό.

Αφαίρεση της άδειας λειτουργίας καφετεριών που κάνουν επιλογή πελατών προτείνει, για άλλη μια φορά -μετά το προχτεσινό δημοσίευμα της Μ- ο δημοτικός σύμβουλος κ. Μπάμπης Μπαρμπουνάκης, ο οποίος χαρακτηρίζει το φαινόμενο "κοινωνικό ρατσισμό".

Έτσι, τιμωρήθηκαν με πρόστιμο 30.000 ευρώ και 20.000 ευρώ, αντίστοιχα, καθώς και με αφαίρεση τριών βαθμών για κάθε αγώνα, όσο διαρκεί η μη καταβολή της εγγυητικής. Για να εξασφαλίζεται το ότι τα περιεχόμενα του αρχείου είναι σωστά, πρέπει οι συγγραφείς να έχουν αποκλειστική πρόσβαση στο αρχείο.

Όπως έγραψε η "Μ", καφετερίες στην πλατεία Αριστοτέλους προσφέρουν καφέ μόνο σε νέους, ενώ με το πρόσχημα του "ρεζερβέ" δεν επιτρέπουν σε ηλικιωμένους να κάνουν χρήση των υπηρεσιών τους.

Η ΕΕΑ ανακοίνωσε την έναρξη ελέγχου για τη διαπίστωση κωλυμάτων παραγόντων του ποδοσφαίρου και του μπάσκετ.

Όταν γράφει λοιπόν μια διεργασία-συγγραφέας καμία άλλη διεργασία δεν έχει πρόσβαση στο αρχείο.

Με αφορμή το δημοσίευμα, ο κ. Μπαρμπουνάκης επαναφέρει πρόταση που έκανε πριν από τρία χρόνια στο δημοτικό συμβούλιο Θεσσαλονίκης.

Αντίθετα, πολλές διεργασίες-αναγνώστες μπορούν να διαβάζουν ταυτόχρονα.

"Η συμπεριφορά αυτή προσβάλλει την πόλη και τους κατοίκους της.

Για να δώσουμε μια λύση στο πρόβλημα αυτό πρέπει να αποφασίσουμε ποιοι θα έχουν προτεραιότητα: οι αναγνώστες ή οι συγγραφείς, όταν ταυτόχρονα μια διεργασία θέλει να διαβάσει και μια θέλει να γράψει.

Έχει ξεκινήσει την προσπάθεια να σταματήσει αυτή η συμπεριφορά εδώ και πέντε χρόνια.

Εμείς θα υποθέσουμε εδώ ότι προηγούνται οι αναγνώστες, δηλαδή οι συγγραφείς περιμένουν να ολοκληρωθούν οι λειτουργίες ανάγνωσης.

Πρέπει να επισημανθούν ποιοι ιδιοκτήτες καταστημάτων συμπεριφέρονται με αυτό τον τρόπο και εφόσον συνεχίζουν αυτήν την πρακτική να τους αφαιρείται η άδεια.

- Στη συνέχεια πρέπει να αποφασίσουμε ποιους σηματοφορείς και μεταβλητές θα χρησιμοποιήσουμε και ποιο ρόλο θα αναλάβει ο καθένας.

Έχω επισημάνει το θέμα στο δημοτικό συμβούλιο, αλλά δυστυχώς δεν υπήρξε καμία παρέμβαση", υποστηρίζει στη "Μ" ο κ. Μπαρμπουνάκης.

Θα εξετάζουμε ένα-ένα τα προβλήματα ακεραιότητας δεδομένων που υπάρχουν και θα προσθέτουμε διαδοχικά εντολές στον κώδικα των διεργασιών.

"Μιλάμε για μια πόλη ανοικτή, φιλόξενη, που θέλουμε να παίξει ένα ρόλο στην ευρύτερη περιοχή κι από την άλλη έχουμε αποκλεισμούς σε καφέ.

Οι απλούστερες μορφές του κώδικα φαίνονται στο σχήμα.

Αλήθεια, που θα πάνε οι ηλικιωμένοι να πιουν τον καφέ τους;", τονίζει ο ίδιος.

Η διεργασία - συγγραφέας γράφει στο αρχείο myfile, ενώ η διεργασία - αναγνώστης διαβάζει από αυτό.

Ο κ. Μπαρμπουνάκης προτείνει επίσης να μην πληρώνουν δημοτικά τέλη τα παραδοσιακά καφενεία, όπου συχνάζουν πολίτες μεγάλης ηλικίας.

- Οπωσδήποτε πρέπει να χρησιμοποιήσουμε ένα σηματοφορέα ο οποίος θα εξασφαλίζει το ότι μόνο ένας συγγραφέας θα γράφει ανά πάσα στιγμή στο αρχείο, ώστε οι αλλαγές στο αρχείο να γίνονται σωστά.

"Η τρίτη ηλικία δεν ξέρει πού να ακουμπήσει στο δήμο Θεσσαλονίκης.

Κάθε συγγραφέας προτού γράψει θα καταλαμβάνει το σηματοφορέα αυτό και όταν τελειώνει θα τον ελευθερώνει.

Πρέπει να δώσουμε βαρύτητα", κατέληξε.

Το όνομα του σηματοφορέα θα είναι write_sema.

ΦΩΤΗΣ ΚΟΥΤΣΑΜΠΑΡΗΣ

Τώρα κάθε διεργασία - συγγραφέας εκτελεί μία λειτουργία Ρ στο σηματοφορέα, και όταν αυτή ολοκληρωθεί εκτελεί την εγγραφή. Στη συνέχεια απελευθερώνει το σηματοφορέα με τη λειτουργία V για να τον διαθέσει στους υπόλοιπους συγγραφείς.

- Για να βεβαιωθούν οι αναγνώστες ότι δε γράφει κάποιος στο αρχείο πριν διαβάσουν, πρέπει πριν από την ανάγνωση να καταλάβουν το σηματοφορέα write_sema. Όμως, όταν ένας αναγνώστης έχει καταλάβει το σηματοφορέα με τη λειτουργία Ρ, όλοι οι άλλοι που θα εκτελέσουν επίσης την Ρ θα τον περιμένουν. Αυτό είναι κάτι ανεπιθύμητο, μια που πολλοί αναγνώστες μπορούν να διαβάζουν ταυτόχρονα. Έτσι, αρκεί ο πρώτος αναγνώστης να καταλάβει το σηματοφορέα αυτό, και οι υπόλοιποι μπορούν πλέον να διαβάζουν άφοβα. Ο τελευταίος αναγνώστης αντίστοιχα πρέπει να ελευθερώσει τον write_sema.

Για να διαπιστώσει μια διεργασία - αναγνώστης αν είναι η πρώτη, πρέπει σε μια μεταβλητή να κρατείται το πλήθος των αναγνωστών που είναι ενεργοί ανά πάσα στιγμή· στην μεταβλητή θα δώσουμε το όνομα readcount. Αρχικά η μεταβλητή έχει την τιμή 0, κάθε αναγνώστης την αυξάνει πριν από την ανάγνωση, και τη μειώνει μετά από αυτήν. Ο πρώτος αναγνώστης, αφού αυξήσει τη readcount, θα διαπιστώσει ότι έχει την τιμή 1 και θα καταλάβει το σηματοφορέα write_sema. Ο τελευταίος, όταν τη μειώσει, θα διαπιστώσει ότι έχει πάλι τιμή 0 και θα ελευθερώσει το σηματοφορέα write_sema.

- Όμως η προσθήκη που κάναμε στους αναγνώστες έχει ένα πρόβλημα: μπορεί πολλοί αναγνώστες μαζί να αυξάνουν ή να μειώνουν τη μεταβλητή readcount, και μετά να ελέγχουν την τιμή της. Σε μια τέτοια περίπτωση τα αποτελέσματα είναι ανεξέλεγκτα και συνήθως όχι σωστά. Μια που η readcount είναι μοιραζόμενη μεταβλητή, η πρόσβαση σε αυτήν πρέπει να φυλάσσεται από ένα σηματοφορέα, στον οποίο θα δώσουμε το όνομα rc_sema. Οι αναγνώστες θα καταλαμβάνουν τον rc_sema πριν να αυξήσουν την τιμή της readcount και θα τον ελευθερώνουν αφού έχουν ελέγξει την τιμή της.