Потоки (POSIX Threads) на Си. Как каждую итерацию завершать половину потоков?
Здравствуйте, у меня такая проблема. Нужно написать многопоточную программу для сортировки массива алгоритмом слияния (merge sort). Программа получает на вход два параметра, размер массива (для сортировки) и число потоков. Массив заполняется рандомнами числами (в учебных целях). Размер массива и количество потоков будет число в степени 2. (То есть, 2, 4, 8, 16, и т.д - тоже для простоты в учебных целях). Пример массив на 16 элементов и количество потоков 4. При создании потока передаем в массив число "і" по которому он вычислит индекс в массиве с которым будет работать, то есть на пример "поток 0" отсортирует от 0 до 4 (0,1,2,3). И так все потоки.
Вот в чем у меня проблема. После сортировки, нужно "убить" поток соседа и провести слияние с его массивом. Например поток "0" убивает поток "1" и вызвать функцию слияния. (от позиции 0 до 8). И так продолжать пока не останется один поток, который выполнит слияние двух кусков массива. Есть массив который хранит ID потока, размер массива всегда 64 (максимальное количество потоков программы).
Я так понимаю нужно сделать все через While пока количество потоков не будет равно 1. При каждой итерации потоки будут ждать пока все закончат, после чего будет "убийство" :))))) Но как синхронизировать потоки, что бы после завершения завершался каждый второй поток, а тот что не завершался вызывал функцию слияния?
P.S Простите может я очень тупо все описал, но если вдруг кто то понял и может помочь то большое Вам спасибо))))
Не нужно убивать потоки: пока они не отсортировали свою часть их убивать вредно, потому что их работа ещё не сделана, после того как они отсортируют свою часть часть из них должна завершиться сама, а другая часть -- заниматься слиянием.