JohnySlasher Δημοσ. 6 Φεβρουαρίου 2014 Δημοσ. 6 Φεβρουαρίου 2014 Καλησπέρα παίδες θέλω λίγη βοήθεια σχετικά με ένα project που έχω. Πρόκειται για ενα theatre-reservation application. Είναι server-client. Έχουμε 10 τηλεφωνητές οι οποίοι μπορούν να κλείνουν θέσεις ταυτόχρονα. Κάθε φορά που δημιουργείται ένας client δημιουργώ ένα thread και εκτελώ κάποιους υπολογισμούς.Τώρα ποιο είναι το θέμα μου, πρέπει να μπορώ να εξυπηρετήσω μέχρι και 10 clients ταυτόχρονα. Όταν τελείωσει κάποιος client, αδειάζει ένας τηλεφωνητης και αρα συνδεέται σε αυτόν ο επόμενος client που περίμενε στην ουρά.Ξέρω ότι πρέπει να χρησιμοποιήσω condition vars αλλά δεν ξέρω πως ακριβώς. Έχω σκαλώσει άσχημα. Αυτό που θέλω να κάνω είναι lock mutex() counter++; if(counter > 10) block thread() until an operator is free else do computations unlock mutex() Όπου το counter αφορά τους τηλεφωνητές και το αρχικοποιώ σε 0.
Moderators Kercyn Δημοσ. 6 Φεβρουαρίου 2014 Moderators Δημοσ. 6 Φεβρουαρίου 2014 Θα μπορούσες όταν συνδέεται ένας client να ελέγχεις τον counter και αν είναι <10 τότε μόνο να δημιουργείς το thread, αλλιώς να τον βάζεις σε μια ουρά (πχ σε μια while counter < 10).
ChRis6 Δημοσ. 7 Φεβρουαρίου 2014 Δημοσ. 7 Φεβρουαρίου 2014 Ο γενικός σηματοφόρος δεν σε βολεύει ; // main sem_init(&sem,10); // Every thread Pi // block if more than 10... sem_wait(&sem); // process // wake one from the queue sem_post(&sem);
JohnySlasher Δημοσ. 7 Φεβρουαρίου 2014 Μέλος Δημοσ. 7 Φεβρουαρίου 2014 Παίδες είναι project σχολής και πρέπει να το κάνουμε με mutex & cond vars.. Σημαφόρους χρησιμοποιούσαμε στο προηγούμενο project που ασχολούμασταν με διεργασίες
cyberrobot Δημοσ. 8 Φεβρουαρίου 2014 Δημοσ. 8 Φεβρουαρίου 2014 χρησιμοποίησε το σαν έναν triger, μόλις πέσει ο αριθμός των πελατών κάτω από το 10 να τριγκάρει κάτι κάπου με το condition var και να να δίνει το επόμενο πελάτη εφόσον είναι διαθέσιμος. Θεωρώ θα υπάρχει και σχετικό κλείδωμα με mutex για τον έλεγχο του αριθμού των πελατών....
Timonkaipumpa Δημοσ. 8 Φεβρουαρίου 2014 Δημοσ. 8 Φεβρουαρίου 2014 Το πρόβλημα είναι το ίδιο με το "παραγωγός" - "καταναλωτής", αλλά για πολλούς καταναλωτές. Το βλέπεις από την μεριά του client... δες το από την μεριά του τηλεφωνητή.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα