HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο

Σχετικά έγγραφα
HY-486 Αρχές Κατανεμημένου Υπολογισμού

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Προγραμματιστική Εργασία - 2o Μέρος

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 1o Μέρος

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο

Προγραμματιστική Εργασία Μέρος Β. Δρακωνάκης Κώστας Παπαϊωάννου Αντώνης

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 1o Μέρος

ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2017 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος 2016 Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος


Παρουσίαση 5 ης Άσκησης:

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

ΗΥ486 - Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο Δεύτερη Προγραμματιστική Εργασία

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2 ο Μέρος

Παρουσίαση 5 ης Άσκησης:

HY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2 ο Μέρος

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2 ο Μέρος

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2016 Διδάσκουσα: Παναγιώτα Φατούρου. Προγραμματιστική Εργασία 2 ο Μέρος

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Παναγιώτα Φατούρου. Προγραμματιστική Εργασία 2 ο και 3 ο Μέρος

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Προγραµµατιστική Εργασία 2 ο Μέρος

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου. Προγραμματιστική Εργασία 1 ο Μέρος

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

ΗΥ240: Δοµές Δεδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

Προγραµµατιστική Εργασία - 2 ο Μέρος

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

ΗΥ240: Δοµές Δεδοµένων Εαρινό Εξάµηνο Ακαδηµαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 2 ο Μέρος

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

Δομές Δεδομένων. Ενότητα 10: Πλήρη Δυαδικά Δέντρα, Μέγιστα/Ελάχιστα Δέντρα & Εισαγωγή στο Σωρό- Ο ΑΤΔ Μέγιστος Σωρός. Καθηγήτρια Μαρία Σατρατζέμη

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης


Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Εργαστήριο 14. Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t)

ΗΥ240: Δομές Δεδομένων Χειμερινό Εξάμηνο Ακαδημαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου. Προγραμματιστική Εργασία 2 ο Μέρος

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο M. Χατζόπουλος. Προθεσμία: 19/01/2015

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ουρές Προτεραιότητας. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

Παράλληλη Επεξεργασία

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

Εργαστήριο 5. Εαρινό Εξάμηνο

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ EPL035: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

ΗΥ240: Δοµές Δεδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Διδάσκουσα: Παναγιώτα Φατούρου Προγραµµατιστική Εργασία - 1 ο Μέρος

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 1 ο Μέρος

an:3 are:6 a:10

Συλλογές, Στοίβες και Ουρές

Δομές Δεδομένων. Ενότητα 3: Ουρές Εισαγωγή-Υλοποίηση ΑΤΔ Ουρά με πίνακα. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Προγραµµατιστική Εργασία 1 ο Μέρος

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Διάλεξη 1: Δομές Δεδομένων και Αλγόριθμοι - Εισαγωγή. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Εργασία 3 Σκελετοί Λύσεων

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

0 The quick brown fox leaped over the lazy lazy dog 1 Quick brown foxes leaped over lazy dogs for fun

$./MirrorInitiator -n <MirrorServerAddress> -p <MirrorServerPort> \\ -s <ContentServerAddress1:ContentServerPort1:dirorfile1:delay1, \\

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ «ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ»

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

Παράλληλη Επεξεργασία Εργαστηριακή Ασκηση Εαρινού Εξαµήνου 2008

Προγραμματισμός Ι (ΗΥ120)

ΗΥ360 Αρχεία και Βάσεις εδοµένων

Άρα, Τ ser = (A 0 +B 0 +B 0 +A 0 ) επίπεδο 0 + (A 1 +B 1 +A 1 ) επίπεδο 1 + +(B 5 ) επίπεδο 5 = 25[χρονικές µονάδες]

Κατανεμημένα Συστήματα

Οι δυναμικές δομές δεδομένων στην ΑΕΠΠ

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

Διδάσκων: Παναγιώτης Ανδρέου

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

Διαδικασιακός Προγραμματισμός

Transcript:

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο 2017-2018 Πρώτη Προγραμματιστική Εργασία Προθεσμία παράδοσης: Δευτέρα 30/4 στις 23:59. 1. Γενική Περιγραφή Στην πρώτη προγραμματιστική εργασία καλείστε να υλοποιήσετε ένα διαμοιραζόμενο σύστημα παραγωγής και κατανάλωσης πληροφοριών. Η προγραμματιστική εργασία θα πρέπει να υλοποιηθεί στην γλώσσα C με τη χρήση της βιβλιοθήκης pthreads. Προσοχή: Η εργασία είναι, εν μέρει, διαφορετική για τους προπτυχιακούς και τους μεταπτυχιακούς φοιτητές. Κάθε μέρος αναφέρεται αναλυτικά παρακάτω. 2. Υλοποίηση Στην εργασία αυτή θα πρέπει να υλοποιήσετε ένα διαμοιραζόμενο σύστημα παραγωγής και κατανάλωσης πληροφοριών (producer-consumer system), όπου η κάθε δημοσιευμένη πληροφορία θα χαρακτηρίζεται από ένα hashtag, δηλαδή θα αφορά μία συγκεκριμένη θεματική ενότητα. Οι λειτουργίες που θα πραγματοποιούνται στο σύστημα θα είναι η δημοσίευση και η λήψη πληροφοριών. Για τη δημοσίευση των πληροφοριών, μία οικογένεια από νήματα που θα ονομάζονται νήματα παραγωγής (ή παραγωγοί ή νήματα δημοσίευσης) θα παράγουν πληροφορίες και θα τις εισάγουν σε μία διαμοιραζόμενη ουρά (shared queue). Πρέπει να σημειωθεί, ότι κάθε παραγωγός παράγει πληροφορίες με ένα συγκεκριμένο, μοναδικό hashtag. Στη συνέχεια, οι παραγωγοί θα μεταφέρουν τις πληροφορίες σε μία δεύτερη διαμοιραζόμενη δομή δεδομένων, διαγράφοντάς τες από τη διαμοιραζόμενη ουρά. Έπειτα, οι πληροφορίες θα διαβάζονται και θα διαγράφονται από τη δεύτερη διαμοιραζόμενη δομή δεδομένων από μια δεύτερη οικογένεια νημάτων, τα νήματα κατανάλωσης (ή καταναλωτές). Πιο συγκεκριμένα, στην πρώτη φάση, που είναι η φάση δημιουργίας πληροφοριών, κάθε νήμα παραγωγής θα παράγει πληροφορίες που περιγράφονται από το struct: struct info { int producerid; int timestamp; Στο παραπάνω struct, το producerid είναι το μοναδικό αναγνωριστικό του κάθε νήματος παραγωγής και το timestamp είναι η χρονική στιγμή που δημιουργήθηκε η πληροφορία. Για λόγους

απλότητας, το producerid υποδηλώνει και το hashtag της πληροφορίας που παράγεται από αυτόν τον παραγωγό. Το νήμα με αναγνωριστικό producerid παράγει πληροφορίες με τα εξής timestamps: i*n + producerid όπου Ν είναι το πλήθος των παραγωγών, ενώ το i παίρνει τις τιμές 0 i N-1. Επομένως: Ο παραγωγός με producerid=0 παράγει πληροφορίες (struct info) με timestamps: 0, N, 2*N, 3*N,, (Ν-1)*Ν = N^2 N. Ο παραγωγός με producerid=1 παράγει πληροφορίες με timestamps: 1, N+1, 2*N+1, 3*N+1,..., N^2 N + 1.... Ο παραγωγός με producerid=n-1 παράγει πληροφορίες με timestamps: N-1, 2*N-1, 3*N- 1,, N^2 N (N-1) = N^2-1. Την κάθε πληροφορία που παράγει ο κάθε παραγωγός, την εισάγει (καλώντας την enqueue) στην διαμοιραζόμενη ουρά (concurrent queue) η οποία αναπαρίσταται από το παρακάτω σχήμα: Η διαμοιραζόμενη ουρά θα πρέπει να υλοποιηθεί με τους εξής τρόπους: Unbounded Total Queue με χρήση locks, όπως έχει διδαχθεί στο μάθημα (κεφάλαιο 5, σελίδες 2 και 3). Η δομή θα αναπαρίσταται από το struct: struct queue { struct queue_node *Head; struct queue_node *Tail; pthread_mutex_t head_lock; pthread_mutex_t tail_lock; Το struct που θα περιγράφει τον κάθε κόμβο της ουράς θα είναι της μορφής: struct queue_node { struct info inf; struct queue_node *next;

Μεταπτυχιακοί φοιτητές (Bonus 25% για τους προπτυχιακούς): Unbounded Lock-Free Queue χωρίς τη χρήση locks (non-blocking algorithm of Michael and Scott), όπως έχει διδαχθεί στο μάθημα (κεφάλαιο 5, σελίδες 4 και 5). Η δομή θα αναπαρίσταται από ένα struct που θα περιέχει δύο pointers που θα δείχνουν στην αρχή και στο τέλος της ουράς, αντίστοιχα. Ο κάθε κόμβος της ουράς θα είναι ένα struct που θα περιέχει δύο πεδία, το πεδίο info και το πεδίο next που είναι δείκτης στο επόμενο στοιχείο της ουράς. Πριν προχωρήσουν στην επόμενη φάση, όλοι οι παραγωγοί θα πρέπει να έχουν τελειώσει τη φάση της δημοσίευσης, δηλαδή την εισαγωγή των πληροφοριών που ο καθένας παράγει στη διαμοιραζόμενη ουρά. Για να επιτευχθεί αυτό, θα χρησιμοποιήσετε ένα barrier (από τη βιβλιοθήκη των pthreads) ώστε τα νήματα να συγχρονιστούν με το πέρας της φάσης της δημοσίευσης και να ξεκινήσουν συγχρονισμένα την επόμενη φάση. Τα νήματα θα φτάνουν στο barrier αφότου τελειώσουν με την παραγωγή όλων των πληροφοριών τους και την εισαγωγή των πληροφοριών αυτών στην διαμοιραζόμενη ουρά. Αφού ολοκληρωθεί η φάση της δημοσίευσης, οι πληροφορίες θα πρέπει να μεταφερθούν από τη διαμοιραζόμενη ουρά σε μια άλλη διαμοιραζόμενη δομή, προκειμένου να μπορέσουν να καταναλωθούν από τους καταναλωτές. Συγκεκριμένα, οι παραγωγοί ξεκινούν να διαγράφουν πληροφορίες από την ουρά (dequeue) και κάθε πληροφορία που διαγράφουν την εισάγουν στην ακόλουθη δομή: Διαμοιραζόμενο Δένδρο Δυαδικής Αναζήτησης (binary search tree) στο οποίο ο συγχρονισμός επιτυγχάνεται με fine-grained synchronization (hand-over-hand locking). Το δένδρο είναι ταξινομημένο βάσει του πεδίου timestamp (έτσι ώστε αν πραγματοποιηθεί ενδοδιατεταγμένη διάταξη πάνω στο δένδρο, τα timestamps να εμφανίζονται σε αύξουσα διάταξη). Concurrent Binary Search Tree Μεταπτυχιακοί φοιτητές (Bonus 20% για τους προπτυχιακούς): Ουρά Προτεραιότητας (Priority Queue), υλοποιημένη ως ένα δυναμικό πλήρες δένδρο (dynamic complete tree) (όπως αυτή που σας ζητήθηκε να υλοποιήσετε στην 1η σειρά θεωρητικών ασκήσεων, Άσκηση C).

Concurrent Priority Queue Το struct που θα περιγράφει τον κάθε κόμβο του δένδρου θα είναι της μορφής: struct tree_node { struct info inf; pthread_mutex_t lock; struct tree_node *lc; struct tree_node *rc; Ένας global pointer, struct tree_node *Root, δεικτοδοτεί την ρίζα του δένδρου. Ταυτόχρονα, οι καταναλωτές θα ξεκινούν να διαγράφουν κόμβους (πληροφορίες) από το δένδρο. Επομένως, θα πρέπει κι αυτοί να συμμετέχουν στο barrier που ακολουθεί τη φάση δημοσίευσης. Συγκεκριμένα, οι καταναλωτές ξεκινούν την εκτέλεσή τους με τη συμμετοχή τους σ αυτό το barrier. Επομένως, οι παραγωγοί πραγματοποιούν εισαγωγές στη δεύτερη διαμοιραζόμενη δομή παράλληλα με τις διαγραφές που εκτελούν τα νήματα κατανάλωσης. Συγκεκριμένα, για τη φάση της διαγραφής θα πρέπει να λάβετε υπ όψιν σας τα εξής: Κάθε νήμα κατανάλωσης ενδιαφέρεται να καταναλώσει όλες τις πληροφορίες μιας μόνο κατηγορίας, δηλαδή τις πληροφορίες που έχουν δημοσιευθεί από έναν μόνο παραγωγό. Για λόγους απλότητας, θεωρήστε ότι το νήμα κατανάλωσης με αναγνωριστικό id, ενδιαφέρεται να καταναλώσει τις πληροφορίες που παράγονται μόνο από το νήμα παραγωγής με αναγνωριστικό id-1. Επομένως, ο καταναλωτής 3 θα καταναλώσει τις πληροφορίες που παρήγαγε ο παραγωγός 2, ο καταναλωτής 2 θα καταναλώσει τις πληροφορίες που παρήγαγε ο παραγωγός 1, ο καταναλωτής 1 θα καταναλώσει τις πληροφορίες που παρήγαγε ο παραγωγός Ν, κ.ο.κ. Είναι αξιοσημείωτο ότι για να γίνουν παράλληλα οι εισαγωγές και οι διαγραφές στη δεύτερη δομή, ο καταναλωτής με αναγνωριστικό id θα πρέπει να διατηρεί έναν πίνακα από bits (μπορείτε για ευκολία να αποθηκεύσετε integers), N στοιχείων, στον οποίο καταγράφει ποιά από τα N στοιχεία που έχει παράξει ο παραγωγός με αναγνωριστικό id-1, έχει ήδη καταναλώσει.

Μεταπτυχιακοί φοιτητές: Θα υπάρχει μόνο ένα νήμα κατανάλωσης, το οποίο θα εκτελεί όλες τις διαγραφές χρησιμοποιώντας τη DeleteMin(), όπως αυτή περιγράφηκε στην 1η σειρά θεωρητικών ασκήσεων. Για τη διευκόλυνσή σας η υλοποίηση της συνάρτησης CalculatePath() σας δίνεται (βλ. ιστοσελίδα μαθήματος). Όταν κάθε καταναλωτής έχει καταναλώσει όλες τις πληροφορίες που του αντιστοιχούν, οι δύο διαμοιραζόμενες δομές θα πρέπει να είναι άδειες και η διαδικασία θα τερματίζει. 4. Αρχικοποίηση κι Εκτέλεση Προγράμματος Το πρόγραμμα θα πρέπει να δέχεται ως είσοδο έναν φυσικό αριθμό Ν, ο οποίος αναπαριστά το πλήθος της κάθε οικογένειας threads (Ν παραγωγοί και N καταναλωτές) για τους προπτυχιακούς φοιτητές, ενώ για τους μεταπτυχιακούς φοιτητές μόνο το πλήθος των παραγωγών. 5. Παράδοση Εργασίας Για την παράδοση της εργασίας θα πρέπει να χρησιμοποιήσετε το πρόγραμμα turnin, που υπάρχει εγκατεστημένο στα μηχανήματα του τμήματος. Συγκεκριμένα, η εντολή παράδοσης είναι: turnin project1@hy486 Για να επιβεβαιώσετε ότι η υποβολή της εργασίας σας ήταν επιτυχής μπορείτε να χρησιμοποιήσετε την εντολή: verify-turnin project1@hy486 Προσοχή: Τα παραδοτέα σας θα πρέπει να περιέχουν ό,τι χρειάζεται (τα αρχεία πηγαίου κώδικα και ένα README όπου θα εξηγείτε πώς κάνατε compile και πως τρέξατε τον κώδικά σας) και να είναι σωστά δομημένα ώστε να κάνουν compile και να εκτελούνται στα μηχανήματα της σχολής, όπου και θα γίνει η εξέταση της εργασίας. O κώδικάς σας θα πρέπει να περιέχει σχόλια.