Вопрос № 72242: Здравствуйте.
Подскажите на каком уровне ОС понимает что она работает на 2 процесорах?
Как в программе разделить код на 2 процесора чтобы он равномерно распределялся. я так понимаю это происходит на 0 уровне.
И где можно взять документаци...Вопрос № 72300: Подскажите плиз как решить такую задачу.
Имеется два компьютера в сети, на каждом из них
выполняется по одному процессу, которые используют общий
для этих двух процессов файл. Необходимо
синхронизировать использование этого файла <...
Вопрос № 72.242
Здравствуйте.
Подскажите на каком уровне ОС понимает что она работает на 2 процесорах?
Как в программе разделить код на 2 процесора чтобы он равномерно распределялся. я так понимаю это происходит на 0 уровне.
И где можно взять документацию?
Отвечает: Евгений Иванов
Здравствуйте, Сергей Скобин!
ОС сама выделяет и распределяет процессоры по приоритетам. Для этого используй потоки, thread.
В системе Windows есть функции CreateThread.
Также можно указать желаемый процессор для этого потока.
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 23.01.2007, 12:14
Вопрос № 72.300
Подскажите плиз как решить такую задачу.
Имеется два компьютера в сети, на каждом из них
выполняется по одному процессу, которые используют общий
для этих двух процессов файл. Необходимо
синхронизировать использование этого файла
этими двумя процессами. Т.е. если один процесс
работает с этим файлом другой - ожидает пока
первый процесс закончит свою работу.
Как это реализовать? Хотя бы основные принципы!
Спасибо за ответы!
Отправлен: 23.01.2007, 19:38
Вопрос задал: kool (статус: 6-ой класс)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: ramok
Здравствуйте, kool!
самое просто это использовать файлов-флагов.
например у вас файл называется share.dat.
первый процесс пытается создать файл share.dat.lock нулевого размера, если ему это удается, то он начинает работать с файлом, и когда заканчивает то стирает этот файл.
процесс два тоже пытается создать файл share.dat.lock, но допустим что этот файл уже создан. значит другой процесс сейчас работает над этим файлом. процесс переодически пытается создать лок файл, до тех пор пока ему это не удается. после окончании работы он в свою очередь стирает лок файл.
Ответ отправил: ramok (статус: Студент)
Ответ отправлен: 23.01.2007, 19:49 Оценка за ответ: 5 Комментарий оценки: Спасибо! Это наверное самое универсальное решение, хотя и не самое быстрое!
Отвечает: Евгений Иванов
Здравствуйте, kool!
Используй атрибут доступа. Открывай файл с закрытием доступа, и с проверкой на доступ. Если доступ закрыт, то ждёт по циклу, пока доступ будет разрешён. Когда один комп завершит работу, закрывай файл, тогда второй комп откроет его и т.д.
Насчёт задержек - отдавай процессорное время и проверяй через каждые 500 мс, взгляни на прерывание int 21 и её функции 83h и др.
Удачи!
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 23.01.2007, 19:52 Оценка за ответ: 5 Комментарий оценки: Наверное это самое лучшее, но хотелось бы чтобы ожидающая прога не занимала процессорное время,
каждый раз проверяя освободился ли файл. Спасибо!
Отвечает: Лысков Игорь Витальевич
Здравствуйте, kool!
Хочу предложить взглянуть на проблему по-другому.
Если один процесс является основным и является хозяином файла.
Тогда можно организовать систему по принципу клиент-сервер.
В таком случае основной процесс монопольно работает с файлом сам,
плюс выполняет запросы от клиентов.
Клиент-сервер можно организовать, например, при помощи пайпов или сокетов
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 24.01.2007, 11:23 Оценка за ответ: 5 Комментарий оценки: Но если сервер упадет (скажем комп отключился), то все. Но вариант интересный! Спасибо!
Отвечает: Зенченко Константин Николаевич
Здравствуйте, kool!
если Вы используете CreateFile: Вам нужно переменную dwShareMode обнулить
файл открывается блокированным для других процессов до закрытия файла
если файл уже открыт фунция дает ошибку.
если Вы используете OpenFile: Вам нужно переменной uStyle присвоить значение
OF_SHARE_EXCLUSIVE
Удачи!
Ответ отправил: Зенченко Константин Николаевич (статус: 1-ый класс)
Ответ отправлен: 25.01.2007, 11:41 Оценка за ответ: 5 Комментарий оценки: Спасибо!