Δείτε εδώ πώς χρησιμοποιείται η rand() και η srand() για παραγωγή ψευδοτυχαίων αριθμών.

srand(time(NULL)): αν βάλω srand (c), όπου c μια σταθερά, στην αρχή της εκτέλεσης, τότε κάθε εκτέλεση του προγράμματος θα παράγει την ίδια σειρά από ψευδοτυχαίους. Αν περάσω τη τωρινή ώρα όπως στο παρόν παράδειγμα, κάθε φορά θα παίρνω και διαφορετικό αποτέλεσμα.

srand()/rand() vs. rand_r(): οι srand()/rand() δεν είναι thread safe, γιατί βασίζονται σε μία καθολική μεταβλητή (μη ορατή στο χρήστη) για να κρατάνε κατάσταση ανάμεσα στις κλήσεις, οπότε παράλληλες κλήσεις από πολλά νήματα τροποποιούν παράλληλα την ίδια μεταβλητή. Γι'αυτό το λόγο υπάρχει η rand_r() που κρατάει την κατάσταση αυτή στην παράμετρό της. Αν βέβαια όλα τα νήματα χρησιμοποιούν την ίδια καθολική μεταβλητή ως παράμετρο στην rand_r(), ουσιαστικά έχουμε το ίδιο πρόβλημα με πριν.

Αν αντιμετωπίσετε κάποιο θέμα με συνεχή παραγωγή των ίδιων αριθμών, δείτε εδώ και δώστε έμφαση στις λέξεις κλειδιά που έπρεπε να δώσετε στο google ώστε να βρείτε μόνοι/ες την απάντηση.