3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
|
|
1 | |
Semaphore30.03.2013, 18:09. Показов 1729. Ответов 5
Метки нет (Все метки)
Прочитал мануал по семафору, разобрал простой пример с его применением.
Но непонятно следующее предложение: "Каждому элементу массива должен быть сопоставлен свой собственный семафор, предотвращающий одновременное обращение двух процессов к одним и тем же элементам." Как это сделать? Тут вообще тьма.
0
|
30.03.2013, 18:09 | |
Ответы с готовыми решениями:
5
Объясните как работает Semaphore Semaphore Wait(int millisecondsTimeout) Не могу найти класс Semaphore Какое назначение у параметров Semaphore Constructor? |
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
|
30.03.2013, 21:38 | 2 |
Вероятно, это про какой-то частный случай, когда есть массив, каждое отдельное значение в котором нужно читать/писать разным процессам и при этом ставить блокировку на весь массив сразу не выгодно. Соответственно, объект синхронизации тоже нужен для каждого элемента.
0
|
3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
|
|
31.03.2013, 09:01 [ТС] | 3 |
0
|
3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
|
||||||
27.04.2013, 12:51 [ТС] | 5 | |||||
Написал прогу, но никак не исправить ошибки при сборке. Что я написал не так?
Задание: Основной процесс должен выделить область разделяемой памяти и заполнить ее N случайными числами. Количество чисел, а также минимальное и максимальное допустимые значения должны быть получены из параметров командной строки. Каждому элементу массива должен быть сопоставлен свой собственный семафор, предотвращающий одновременное обращение двух процессов к одним и тем же элементам. После заполнения массива должен быть порожден второй процесс, который начнет производить сортировку чисел по возрастанию. Пока идет сортировка, первый процесс должен пытаться последовательно читать числа из массива и выводить на экран их текущее значение и результат работы с семафором: удалось ли получить доступ к числу сразу, или пришлось ждать освобождения семафора. После окончания обхода массива первый процесс должен проверить, завершился ли уже процесс сортировки. Если да - то вывести массив и завершиться. Если еще нет - то начать новую итерацию обхода массива. В начале каждой итерации обхода требуется выводить ее порядковый номер. Проверку факта завершения дочернего процесса (без перевода текущего процесса в состояние ожидания) можно сделать при помощи функции waitpid с параметром WHOHANG. (подробнее см. man waitpid) Второй процесс в ходе сортировки также должен проверять и выставлять семафор перед обращением к каждому из элементов. Далее первый процесс должен вывести на экран отсортированный массив. Второй процесс не должен осуществлять никакого вывода на экран. Первый процесс должен самостоятельно выполнить освобождение всех выделенных ресурсов (в том числе семафоров) в конце своей работы.
0
|
3 / 3 / 0
Регистрация: 14.09.2012
Сообщений: 84
|
|||||||||||
28.04.2013, 22:17 [ТС] | 6 | ||||||||||
Ошибки при сборке исправил, но все равно на каком-то моменте прога зависает и ожидает освобождения мьютекса.
Кое что еще раз исправил, но не работает как надо.
0
|
28.04.2013, 22:17 | |
28.04.2013, 22:17 | |
Помогаю со студенческими работами здесь
6
Как реализовать многопоток? (возможно Semaphore) Синхронизация потоков при использовании semaphore Сделать консольную программу парковки автомобилей используя класс Semaphore Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |