Синхронизация потоков
Вопрос почему вот сдесь НЕ НУЖНО использовать синхронизацию :
(*1)Написать multithread-подпрограмму, получающую в качестве аргументов массив вещественных чисел a размерности nxn, целое число n, номер потока (thread) k, общее количество потоков (threads) p, и заменяющую матрицу a на ее транспонированную относительно побочной диагонали. При этом должна быть обеспечена равномерная загрузка всех потоков. Основная программа должна вводить числа p, n и массив a (из файла или по заданной формуле), запускать потоки, вызывать эту подпрограмму и выводить на экран результат ее работы.
А вот сдесь нужно:
(*2)Написать multithread-подпрограмму, получающую в качестве аргументов одномерный массив вещественных чисел a, целое число n, являющееся длиной этого массива, номер потока (thread) k, общее количество потоков (threads) p, и заменяющую каждый элемент массива a(для которого это возможно) на среднее арифметическое соседних элементов. При этом должна быть обеспечена равномерная загрузка всех потоков. Основная программа должна вводить числа p, n и массив a (из файла или по заданной формуле), запускать потоки, вызывать эту подпрограмму и выводить на экран результат ее работы.
И вообще очень странно , ведь синхронизация , это когда один запрос пытается обработать два и более потока, а взаимо исключение, когда
один из потоков пытается записать в память что-либо , когда второй поток с ней работает (чтение\запись).
По логике в (*2) - должно быть взаимо исключение, но НЕТ! препод говорит, что в (*1) - синхронизация не нужна . Как так ? Ведь там два потока могут выполнять один запрос!
А в(*2) - нужна. Но ведь , там взаимоисключение.
Помогите пожалуйста хотя бы сылками , где про синхронизацию толково написанно.