You are on page 1of 56

Βασικές Έννοιες

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 1 lalis@inf.uth.gr
Μονονηματική / πολυνηματική εκτέλεση
• Μονονηματικό μοντέλο εκτέλεσης (συμβατικό)
• οι εντολές του κώδικα εκτελούνται ακολουθιακά
• μέσα από ένα μοναδικό νήμα εκτέλεσης (execution thread)
• συχνά χρησιμοποιείται και ο όρος διεργασία (process)

• Πολυνηματικό μοντέλο εκτέλεσης


• μπορεί να συνυπάρχουν πολλά νήματα / διεργασίες
• που εκτελούν (τον ίδιο ή διαφορετικό) κώδικα
• ταυτόχρονα μεταξύ τους

• Κάθε νήμα / διεργασία


• έχει τη δική του (ιδιωτική) τοπική κατάσταση
• εκτελείται ανεξάρτητα από τα άλλα νήματα / διεργασίες
Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 2 lalis@inf.uth.gr
μονονηματική εκτέλεση πολυνηματική εκτέλεση

main νήμα P1 P2 P3
(διαδρομή
... εκτέλεσης) ... ... ...
... ... ... ...
PC ... ... PC ... ...
... PC ... ... ...
... ... ... PC ...
... ... ... ...

πρόγραμμα πρόγραμμα
αλληλεπίδραση

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 3 lalis@inf.uth.gr
Ταυτόχρονος & παράλληλος προγραμματισμός
• Ταυτόχρονος προγραμματισμός
• προβλήματα συστημάτων που αποτελούνται
από συνεργαζόμενες διεργασίες
• αν δεν επιθυμούμε να υπάρχει αλληλεπίδραση
μεταξύ των διεργασιών τότε δεν τίθεται θέμα
ταυτόχρονου προγραμματισμού

• Παράλληλος προγραμματισμός
• επιτάχυνση ενός υπολογισμού
• υποδιαιρώντας τον σε περισσότερες διεργασίες
για παράλληλη εκτέλεση (σε ξεχωριστές CPUs)
• βασικός στόχος: η ελαχιστοποίηση της αλληλεπίδρασης
(επικοινωνίας, συγχρονισμού) μεταξύ των διεργασιών

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 4 lalis@inf.uth.gr
Γιατί πολλές διεργασίες;
• Υποστήριξη μη ακολουθιακού κώδικα
• μια διαδικασία μπορεί από τη φύση της να αποτελείται από
ανεξάρτητες υπο-διαδικασίες που μπορεί να εκτελεσθούν
ανεξάρτητα / παράλληλα μεταξύ τους
• Αποφυγή μπλοκαρίσματος
• ένα πρόγραμμα που πρέπει να εκτελεί (συνεχώς) μια
διαδικασία ενώ ταυτόχρονα πρέπει να περιμένει για κάποιο
«εξωτερικό» γεγονός, π.χ. δεδομένα από το δίκτυο / χρήστη
• Καλύτερη δόμηση προγράμματος
• μια πολύπλοκη διαδικασία μπορεί πιθανώς να εκφραστεί πιο
απλά αν δομηθεί ως συνδυασμός πολλών απλούστερων
διαδικασιών που εκτελούνται από διαφορετικές διεργασίες
• Υποστήριξη πολυπρογραμματισμού
• πολλοί χρήστες μοιράζονται ένα μηχάνημα
Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 5 lalis@inf.uth.gr
Παράδειγμα – καλύτερη δόμηση
• Επιθυμούμε να φτιάξουμε ένα πρόγραμμα που
(α) δέχεται από την είσοδο του μια σειρά από λέξεις
(β) εκτυπώνει το κείμενο σε γραμμές των 80 χαρακτήρων
(γ) χωρίς να κόβονται οι λέξεις, και
(δ) κατανέμοντας τα κενά ανάμεσα τους
έτσι ώστε οι γραμμές να είναι στοιχισμένες

Προσέγγιση:
• Σπάμε την πολύπλοκη επεξεργασία σε διακριτά
στάδια οργανωμένα σε μια ροή εκτέλεσης όπου
κάθε στάδιο εκτελείται από μια ξεχωριστή διεργασία

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 6 lalis@inf.uth.gr
input

add
lines remove words assign lines
read spaces
spaces words to
chars between
and /n next line
words

output

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 7 lalis@inf.uth.gr
Παράδειγμα – λογικός παραλληλισμός
• Επιθυμούμε να φτιάξουμε ένα πρόγραμμα που
(α) δέχεται από την είσοδο του μια σειρά από ακέραιες τιμές
(β) τις ταξινομεί με αλφαβητική σειρά
(γ) τις εκτυπώνει στην έξοδο του

Προσέγγιση:
• Η ταξινόμηση μπορεί να γίνει ταυτόχρονα,
χρησιμοποιώντας δύο πίνακες και δύο διεργασίες
οπότε το τελικό αποτέλεσμα προκύπτει με την
συγχώνευση των επιμέρους αποτελεσμάτων

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 8 lalis@inf.uth.gr
input

data data
(unsorted) split (unsorted)

sort sort
data merge data
(sorted) (sorted)

output

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 9 lalis@inf.uth.gr
Παράδειγμα – αποφυγή μπλοκαρίσματος
• Επιθυμούμε να φτιάξουμε ένα πρόγραμμα το οποίο
(α) εκτελεί μια ή περισσότερες χρονοβόρες επεξεργασίες
(β) επιτρέπει ανά πάσα στιγμή στο χρήστη
να ελέγξει την κατάσταση των επεξεργασιών

Προσέγγιση:
• Κάθε επεξεργασία εκτελείται μέσα από μια
ξεχωριστή διεργασία που δημιουργείται
δυναμικά για αυτό το σκοπό

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 10 lalis@inf.uth.gr
worker

result
job

input
job
master worker
result
output
job

result worker

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 11 lalis@inf.uth.gr
Μοντέλο μνήμης & εκτέλεσης

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 12 lalis@inf.uth.gr
Διεργασίες και μνήμη
• Κάθε διεργασία είναι μια ξεχωριστή «οντότητα»
που εκτελεί κώδικα
• ανεξάρτητα από τις άλλες διεργασίες
• κάθε διεργασία μπορεί να εκτελεί διαφορετικό ή τον ίδιο
κώδικα – οι εκτελέσεις παραμένουν ανεξάρτητες!
• Κάθε διεργασία έχει «δική της» κατάσταση εκτέλεσης
• στατική μνήμη (globals)
• δυναμική μνήμη (heap)
• μετρητής εντολών (program counter)
• επιπλέον καταχωρητές CPU (registers)
• στοίβα (stack)
• Δύο πολύ βασικές περιπτώσεις:
διεργασίες με ή χωρίς κοινή μνήμη (globals/heap)
Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 13 lalis@inf.uth.gr
Διεργασίες με κοινή μνήμη

διεργασία #1 διεργασία #2 διεργασία #Ν

καθολική μνήμη

...
...
στοίβα στοίβα στοίβα

μετρητής εντολών μετρητής εντολών ... μετρητής εντολών


και καταχωρητές ΚΜΕ και καταχωρητές ΚΜΕ και καταχωρητές ΚΜΕ

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 14 lalis@inf.uth.gr
Διεργασίες χωρίς κοινή μνήμη

διεργασία #1 διεργασία #2 διεργασία #Ν

καθολική μνήμη καθολική μνήμη καθολική μνήμη

...
...
στοίβα στοίβα στοίβα

μετρητής εντολών μετρητής εντολών ... μετρητής εντολών


και καταχωρητές ΚΜΕ και καταχωρητές ΚΜΕ και καταχωρητές ΚΜΕ

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 15 lalis@inf.uth.gr
Αμοιβαίος αποκλεισμός & επικοινωνία
• Αμοιβαίος αποκλεισμός: συντονισμένη
πρόσβαση σε κοινά δεδομένα ή κοινούς πόρους
• βασικό πρόβλημα για διεργασίες με κοινή μνήμη/πόρους
(κανένα πρόβλημα για διεργασίες χωρίς κοινή μνήμη/πόρους)

• Επικοινωνία: ανταλλαγή δεδομένων


• βασικό πρόβλημα για διεργασίες χωρίς κοινή μνήμη
(κανένα πρόβλημα για διεργασίες με κοινή μνήμη)

• Συγχρονισμός: συνδυασμός των παραπάνω


• Τα βασικά προβλήματα του ταυτόχρονου
προγραμματισμού είναι προβλήματα συγχρονισμού!

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 16 lalis@inf.uth.gr
Ταυτόχρονη εκτέλεση (γενική περίπτωση)
• Δύο βασικές περιπτώσεις
• εναλλαγή διεργασιών πάνω σε μια CPU
• παράλληλη εκτέλεση διεργασιών σε διαφορετικές CPU

Τύπος συστήματος Ταυτόχρονη εκτέλεση


Προσωπικοί υπολογιστές - μια ή λίγες CPU
(θα αλλάξει στο μέλλον)
Εξυπηρετητές - πολλές (δεκάδες) CPU
- για την εκτέλεση εκατοντάδων διεργασιών
- για λογαριασμό διαφορετικών χρηστών / πελατών
Συστήματα παράλληλου - πάρα πολλές (εκατοντάδες) CPU
υπολογισμού - ιδανικά μια CPU ανά τμήμα του υπολογισμού
(πράγμα που δεν ισχύει στην γενική περίπτωση)

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 17 lalis@inf.uth.gr
P1 P2 P3 P1 P2 P3 P1 P2 P3

CPU CPU CPU CPU CPU CPU

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 18 lalis@inf.uth.gr
Εναλλαγή διεργασιών σε μια CPU
• Συχνά πρέπει να υποστηριχθεί η εκτέλεση
Ν διεργασιών πάνω από Μ CPUs, με Μ<Ν
• κλασικό παράδειγμα: Η/Υ με 1 CPU

• Με πολυπλεξία στο χρόνο


• σταματώντας την εκτέλεσης της τρέχουσας διεργασίας
• αρχίζοντας / συνεχίζοντας την εκτέλεση της επομένης

• Η αλλαγή από ένα «πλαίσιο εκτέλεσης» σε ένα άλλο


ονομάζεται εναλλαγή διεργασίας
• process switch / (execution) context switch

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 19 lalis@inf.uth.gr
χρόνος

συνεχόμενη
εκτέλεση καθυστέρηση
λόγω διακοπών
χρόνος που μπορεί να
χρησιμοποιηθεί για την εκτέλεση
άλλων διεργασιών

διακοπτόμενη
εκτέλεση

pause continue

pause continue

pause continue
Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 20 lalis@inf.uth.gr
χρόνος

P1
(α)
P2

(β) P1 & P2

(γ) P1 & P2

(δ) P1 & P2

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 21 lalis@inf.uth.gr
Κύριες «διαστάσεις»
Διάσταση Επιλογές
Καθολική μνήμη - κοινή (shared memory)
(static memory & heap) - ξεχωριστή (private memory)
Εναλλαγή διεργασίας - ρητή (non-preemptive, manual switch)
- αυτόματη (preemptive, automatic switch)
Επιλογή της επόμενης - ρητή (manual process selection)
διεργασίας προς εκτέλεση - αυτόματη (automatic process selection)

Κλασική ορολογία Συνδυασμός επιλογών


automatic/manual scheduling automatic/manual switch & process selection
processes private memory & automatic scheduling
threads shared memory & automatic scheduling
co-routines shared memory & manual scheduling

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 22 lalis@inf.uth.gr
Διαχείριση διεργασιών
(από το σύστημα)

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 23 lalis@inf.uth.gr
Λειτουργία εναλλαγής
• Για κάθε διεργασία, το σύστημα κρατά σε κατάλληλη
δομή την κατάσταση της αντίστοιχης εκτέλεσης
• στατική & δυναμική μνήμη (όχι απαραίτητα)
• μνήμη για την αντιγραφή των καταχωρητών CPU
• στοίβα
• Κύρια βήματα εναλλαγής
• διακοπή εκτέλεσης
• σώσιμο κατάστασης της διεργασίας
• επιλογή της επόμενης διεργασίας προς εκτέλεση
• επαναφορά κατάστασης της επιλεγμένης διεργασίας
• συνέχεια εκτέλεσης
• Πολλές σημαντικές «λεπτομέρειες» …

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 24 lalis@inf.uth.gr
task descriptor
stack
stack_beg
stack_end

mem_start

mem_end

cpu_reg0
memory
cpu_reg1
cpu_reg2

cpu_regN

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 25 lalis@inf.uth.gr
P1 εκτελείται

current
task

task P1 memory memory task P2

regs stack stack regs

CPU

regs

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 26 lalis@inf.uth.gr
σώσιμο κατάστασης P1

current
task

task P1 memory memory task P2

regs stack stack regs

CPU
save
regs

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 27 lalis@inf.uth.gr
επιλογή διεργασίας P2

current
task

task P1 memory memory task P2

regs stack stack regs

CPU

regs

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 28 lalis@inf.uth.gr
επαναφορά κατάστασης P2

current
task

task P1 memory memory task P2

regs stack stack regs

CPU restore
regs

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 29 lalis@inf.uth.gr
P2 εκτελείται

current
task

task P1 memory memory task P2

regs stack stack regs

CPU

regs

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 30 lalis@inf.uth.gr
Κόστος εναλλαγής
• O χρόνος που ξοδεύεται για την εναλλαγή διεργασιών
αποτελεί γραφειοκρατικό κόστος (overhead)
• κατά την διάρκεια της εναλλαγής δεν εκτελείται
κώδικας των προγραμμάτων των χρηστών
• Ο χρόνος της εναλλαγής εξαρτάται κυρίως από
• την πολυπλοκότητα υλοποίησης του συστήματος
• την υποστήριξη που παρέχει το υλικό (ειδικές εντολές)
• Όσο περισσότερες εναλλαγές γίνονται ανά μονάδα
χρόνου τόσο λιγότερος χρόνος αφιερώνεται στην
εκτέλεση των διεργασιών του συστήματος
• χειρότερη περίπτωση: γίνονται μόνο εναλλαγές

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 31 lalis@inf.uth.gr
χρόνος

(α)

(β)

(γ)

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 32 lalis@inf.uth.gr
Κατάσταση διεργασίας
• Πολλές διεργασίες απλά … περιμένουν (κάτι)
• να περάσει ένα συγκεκριμένο χρονικό διάστημα
• να παραλάβουν δεδομένα από άλλες διεργασίες
• να γίνει αληθής μια συγκεκριμένη συνθήκη
• Ιδανικά, το σύστημα πρέπει να γνωρίζει
κατά πόσο μια διεργασία βρίσκεται εν αναμονή
• ώστε να μην της δίνει χρόνο από τον επεξεργαστή
• Για αυτό το σκοπό, το σύστημα υποστηρίζει
ξεχωριστές «καταστάσεις» για μια διεργασία
• και παρέχει ειδικές λειτουργίες για την ρητή (υπό
τον έλεγχο του προγραμματιστή) ή την αυτόματη
μετάβαση ανάμεσα σε αυτές τις καταστάσεις

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 33 lalis@inf.uth.gr
πότε θα έρθει ο
επόμενος χαρακτήρας
από το πληκτρολόγιο;

P1

πότε θα έρθουν τα
δεδομένα που είπε ότι
θα μου στείλει η P1;

P2

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 34 lalis@inf.uth.gr
Ενδεικτικές λειτουργίες
• start(Task *t)
• δημιουργία νέας διεργασίας
• stop()
• τερματισμός (τρέχουσας) διεργασίας
• yield()
• ρητή εναλλαγή – παραχώρηση του επεξεργαστή
• suspend()
• απενεργοποίηση (τρέχουσας) διεργασίας, με εναλλαγή
• resume(Task *t)
• αφύπνιση της διεργασίας στην οποία γίνεται αναφορά
• αν η διεργασία δεν βρίσκεται σε κατάσταση αναμονής,
η κλήση δεν έχει απολύτως κανένα αποτέλεσμα

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 35 lalis@inf.uth.gr
dead

stοp()

running

suspend() context-switch
yield()
(into task)
or
context-switch
(out of task)

blocked ready
resume(task)

start(task)

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 36 lalis@inf.uth.gr
cur

P0 P1 P2
tasks ready running ready

P1 εκτελείται

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 37 lalis@inf.uth.gr
cur

P0 P1 P2
tasks ready ready running

P1 καλεί yield()

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 38 lalis@inf.uth.gr
cur

P0 P1 P2
tasks running ready ready

P2 καλεί yield()

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 39 lalis@inf.uth.gr
cur

P0 P1 P2
tasks ready running ready

P0 καλεί yield()

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 40 lalis@inf.uth.gr
cur

P0 P1 P2
tasks ready blocked running

P1 καλεί suspend()

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 41 lalis@inf.uth.gr
cur

P0 P1 P2
tasks running blocked blocked

P2 καλεί suspend()

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 42 lalis@inf.uth.gr
cur

P0 P1 P2
tasks running blocked blocked

P0 καλεί yield /* δεν γίνεται τίποτα */

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 43 lalis@inf.uth.gr
cur

P0 P1 P2
tasks ready blocked running

P0 καλεί resume(P2) & yield()

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 44 lalis@inf.uth.gr
cur

P0 P1 P2
tasks running blocked ready

P2 καλεί yield()

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 45 lalis@inf.uth.gr
cur

P0 P1 P2
tasks running blocked ready

P0 κάλεσε resume(P2) /* δεν γίνεται τίποτα */

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 46 lalis@inf.uth.gr
Βελτιστοποίηση
• Αν υπάρχουν πολλές διεργασίες σε αναμονή
• δεν συμφέρει να τις κρατάμε στην ίδια λίστα
με τις διεργασίες που είναι έτοιμες προς εκτέλεση
• στην χειρότερη περίπτωση, κάθε φορά που επιχειρείται
εναλλαγή θα πραγματοποιούνται Ο(Ν) έλεγχοι για να
βρεθεί η επόμενη έτοιμη διεργασία
• Μπορούμε να εισάγουμε μια ξεχωριστή λίστα,
αποκλειστικά για τις διεργασίες εν αναμονή
• οι λειτουργίες suspend και resume γίνονται πιο πολύπλοκες
καθώς πρέπει να «μετακινούν» μια διεργασία από την μια
λίστα στην άλλη – αλλά αυτό γίνεται σε Ο(1)
• και η εναλλαγή γίνεται πλέον σε Ο(1)

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 47 lalis@inf.uth.gr
P0 P1 P2
tasks ready running ready

blocked

P1 εκτελείται

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 48 lalis@inf.uth.gr
P0 P2
tasks ready ready

P1
blocked blocked

P1 καλεί suspend()

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 49 lalis@inf.uth.gr
P0 P2
tasks ready ready

P1
blocked blocked

P2 εκτελείται

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 50 lalis@inf.uth.gr
P0
tasks running

P1 P2
blocked blocked blocked

P2 καλεί suspend()

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 51 lalis@inf.uth.gr
P0
tasks running

P1 P2
blocked blocked blocked

P0 καλεί yield() /* δεν γίνεται τίποτα */

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 52 lalis@inf.uth.gr
P0 P1
tasks ready running

P2
blocked blocked

P0 καλεί resume(P1) & yield()

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 53 lalis@inf.uth.gr
P0 P1
tasks running ready

P2
blocked blocked

P1 καλεί yield()

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 54 lalis@inf.uth.gr
Ουρές αναμονής
• Στη συμβατική λειτουργία resume ο καλών πρέπει
να γνωρίζει την διεργασία που θέλει να αφυπνίσει
• ο προγραμματιστής πρέπει να δώσει το αναγνωριστικό της
• Τι γίνεται όμως αν η σχέση αναμονής/αφύπνισης
μεταξύ των διεργασιών είναι «απρόσωπη»;
• αναλογία με μια συμβατική υπηρεσία στα ανθρώπινα
συστήματα: «να περάσει ο επόμενος παρακαλώ»
• Ουρές αναμονής
• όταν μια διεργασία επιθυμεί να περιμένει για τον λόγο Χ
«μπαίνει» στην ουρά που έχει προσυμφωνηθεί για το Χ,
και απενεργοποιείται
• αντίστοιχα, η αφύπνιση γίνεται απομακρύνοντας
μια (π.χ., την πρώτη) διεργασία από την ουρά Χ,
και θέτοντας την σε κατάσταση λειτουργίας
Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 55 lalis@inf.uth.gr
Ενδεικτικές λειτουργίες με ουρές αναμονής
• start(Task *t)
• stop()
• yield()
• suspend(Queue *q):
• τοποθέτηση στην ουρά &
απενεργοποίηση (τρέχουσας) διεργασίας
• resume(Queue *q)
• απομάκρυνση από την ουρά της «επομένης» διεργασίας
& αφύπνιση της
• resumeAll(Queue *q)
• απομάκρυνση & αφύπνιση όλων των διεργασιών της ουράς

Ταυτόχρονος Προγραμματισμός
Προγραμματισμός ΙΙΙ 56 lalis@inf.uth.gr

You might also like