GlobeXgr Δημοσ. 25 Απριλίου 2011 Δημοσ. 25 Απριλίου 2011 Γεια σας, τι ενναλακτικες έχω για να συγχρονίσω 2 thread στη c# εκτός από την suspend - resume. Εχω δυο threads που τρέχουν τον ιδιο κώδικα και θέλω να σταματάνε στο ιδιο σημείο και τα δυο. Μετά θα καλούν μια συνάρτηση και θα τους λέει να συνεχίσουν. any ideas on that one? Ευχαριστώ.
παπι Δημοσ. 25 Απριλίου 2011 Δημοσ. 25 Απριλίου 2011 Δηλαδη θελεις ενα thread να περιμενει να τελειωσουν τα αλλα δυο ωστε να κανει οτι ειναι να κανει.
GlobeXgr Δημοσ. 25 Απριλίου 2011 Μέλος Δημοσ. 25 Απριλίου 2011 Δες λίγο την μέθοδο Join της Thread. H μέθοδος join περιμένει να τελειώσουν τα τhreds τη λειτουργία τους. Στο δικό μου κώδικα τα threads τρεχουν μια συνάρτηση καπως έτσι. void func () { while () { //code here check(); } } Θελω και για τα δυο threads να εκτελείτε η συναρτηση check οταν φτάσουν σε κάποιο συγκεκριμένο σημείο. Επίσης πως μπορώ να έχω ενα αντικείμενο static να χρησημοποιείτε απο ένα thread αποκλιστικά???
kagelos Δημοσ. 25 Απριλίου 2011 Δημοσ. 25 Απριλίου 2011 Κάνε : > void func1() { while () { //code here } } void func2() { check(); } void main() { Thread t1 = new Thread(func1), t2 = new Thread(func1), ...; t1.Start(); t2.Start(); t1.Join(); t2.Join(); t1 = new Thread(func2); t2 = new Thread(func2); t1.Start(); t2.Start(); t1.Join(); t2.Join(); }
_tasos Δημοσ. 26 Απριλίου 2011 Δημοσ. 26 Απριλίου 2011 Θα μπορούσες να έχεις flags (ένα array με τόσα flags όσα και τα thread που έχεις) τα οποία αρχικά θα είναι 0. Όταν κάθε thread φτάσει στο σημείο που θέλεις, τότε θα κάνει το δικό του flag 1. Μετά θα ελέγχει όλα τα flags και όταν όλα γίνουν 1 τότε θα μπορεί να συνεχίσει με την εκτέλεση του. Αυτό που πρέπει να προσέξεις εδώ είναι να βάλεις τα threads που περιμένουν να κάνουν sleep για να μην ελέγχουν συνέχεια το array με τα flags, αυτό θα σου κοστίσει σε χρόνο αφού θα χρησιμοποιούν άδικα CPU κάνοντας συνεχείς ελέγχους. Αν δεν θέλεις να χρησιμοποιήσεις array και θέλεις να χρησιμοποιήσεις μόνο μία μεταβλητή, π.χ. έναν counter τότε θα πρέπει να φροντίσεις ότι η πρόσβαση στη μεταβλητή του counter είναι thread safe. Εδώ πρέπει να χρησιμοποιήσεις κάποιο semaphore.
dt008 Δημοσ. 26 Απριλίου 2011 Δημοσ. 26 Απριλίου 2011 Δες και το Task API (νέο στο .ΝΕΤ 4) http://msdn.microsoft.com/en-us/library/dd460717.aspx
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.