Jump to content



Πέρασμα μεταβλητών σε thread function στη C


Thodoris21

Recommended Posts

Don't do it Φαίδων.

Καλύτερα το κάθε thread να γράφει σε δικό του αρχείο και να το κάνεις merge μετά αφού ολοκληρώσουν την εκτέλεση τους.Μην ξεχνάς τα αρχεία έχουν και θέση που γράφεις που δυσκολεύει τα πράγματα με την χρονοδρομολόγηση των threads (έχουν χρονοδρομολόγηση τα threads ή μόνο οι διεργασίες? που έβαλα τισ σημειώσεις της παράλληλης επεξεργασίας :wall:)

Link to comment
Share on other sites

Για να φτιάξεις logger σε multithreaded εφαρμογή, υπάρχουν δυο τρόποι...

1. Έχεις μια function/object που όποιος την τρέχει κρατάει κρατάει το κλειδί της πόρτας (με mutexes) και το αφήνει μόλις τελειώσει... Δηλαδή κάνεις serialization σε μια ασύγχρονη διαδικασία, το οποίο είναι από την μια πολύ εύκολο αλλά από την άλλη εισάγει χρόνους αναμονής στα threads

2. Φτιάχνεις ένα object το οποίο μόνο αυτό έχει το δικαίωμα να γράψει στο log και όλοι οι άλλοι απλά κάνουν requests στο object να προσθέσει νέες καταχωρήσεις, στην λίστα που έχει να γράψει στο log... Αυτό γίνεται είτε κάνοντας allocation νέα μνήμη κάθε φορά με κάποιο index και id (ώστε να έχει συνέχεια το log και οι καταχωρήσεις να γίνονται πράγματι με χρονική σειρά), είτε αν ξέρεις εκ των προτέρων το πως θα εξελιχθεί η χρήση του log, τότε για ευκολία κάνεις pre-allocation στην μνήμη... Αυτός είναι ο καλύτερος τρόπος όσων αφορά την ταχύτητα, αλλά πολύ πιο δύσκολος στην υλοποίηση γιατί θα πρέπει να φτιάξεις κάποιους δικούς σου headers σε κάθε request που να μπορούν να ταξινομούν τις καταχωρήσεις, να κρατάνε την σωστή σειρά και να έχουν timeouts για σπασμένα requests ώστε να μην καθυστερούν τον logger...

Link to comment
Share on other sites

OK τότε και εγώ κάτι σε αυτό που περιέγραψε ο Jaco θα έκανα. Ένα object που θα δέχεται requests και μόνο αυτό έχει το δικαίωμα να γράφει στο αρχείο. Με αυτό τον τρόπο νομίζω λειτουργεί και ο Logger στην Java.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

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