Процесс P5 должен создать 44 потока: T5.1, T5.2, ..., T5.44. Выполнение потоков процесса P5 должно следовать условиям синхронизации: < /p>
Основной поток процесса, то есть T5.0 не должен прекращаться до других 44 потоков. /> Поток T5.10 может заканчиваться только в то время как 5 потоков (включая себя) работают. (Мне интересно об этой части). Как я могу это реализовать?
Код: Выделить всё
void* thread_func_p5(void* arg) {
int thread_no = (int)(long)arg;
int sem_val;
sem_wait(&sem_p5_barrier);
if (sem_getvalue(&sem_p5_barrier, &sem_val) == 0 && sem_val == 0)
{
sem_post(&sem_t5_10_cond);
}
info(BEGIN, 5, thread_no);
if (thread_no == 10) {
sem_wait(&sem_t5_10_cond);
}
info(END, 5, thread_no);
sem_post(&sem_p5_barrier);
return NULL;
}
< /code>
пояснения: < /strong> < /p>
Информировать тестера о запуске потока:
info(BEGIN, 5, thread_no)< /code> < /p>
сообщить тестированию о завершении потока:
info(END, 5, thread_no)Я свободен использовать любые механизмы синхронизации Linux, такие как: System V Semaphores, Posix Semaphores или Posix Locks и переменные условия.
Код: Выделить всё
sem_p5_barrierТемы должны завершить.>
Подробнее здесь: https://stackoverflow.com/questions/795 ... re-running
Мобильная версия