Сделайте так, как указано в присваивании:
для потоков, инициализируйте большой массив pthread_t*
в main()
/* Large number */
const size_t max_threads = 100;
/* Large array of pointers with every element initialized to zero */
pthread_t *student_threads[max_threads] = {};
size_t thread_count = 0;
и динамически создайте pthread_t
для каждого нового ученика, используя malloc(sizeof(pthread_t))
pthread_t *new_student = malloc(sizeof(pthread_t));
Что не написано, так это то, что вы делаете с new_student
. Это действительно указатель на один pthread_t
. Просто поместите указатель в следующий неиспользуемый слот в вашем массиве:
/* Find next unused spot in array (with value==NULL) */
size_t i = 0
while (i < max_threads && student_threads[i])
i++;
/* assign value to that spot */
student_threads[i] = new_student;
thread_count++;
Не забудьте добавить проверку ошибок, где это необходимо. И освободите все ресурсы, когда вы закончите с ними.
Это включает установку student_threads[i]=NULL
всякий раз, когда вы вызываете free(student_threads[i])
, чтобы вы знали, какие слоты в массиве не используются.