Форум программистов, компьютерный форум CyberForum.ru

разработка объекта синхронизации - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ как задать функции в с++ http://www.cyberforum.ru/cpp-beginners/thread354542.html
например в паскале можно вот так procedure (a) procedure= procedure(a+1)+procedure (ф+2) begin input (a,b) procedure (a,b) как так извините если не правильно главное суть. как сделать так же в с++, читал про void но она не возвращает значение.
C++ Задачи все сюда писать не буду они тут в файле. По возможности кто какие сможет помогите решить. Но это самая сложная Первоначальное напряжение в цепи равно 200 вольт. Известно, что оно меняется через каждую секунду следующим образом: через одну секунду оно уменьшается на М%, а еще через секунду увеличивается на Р%, затем снова уменьшается на М%, потом уменьшается на Р% и т.д. Составьте программу для... http://www.cyberforum.ru/cpp-beginners/thread354538.html
C++ Несколько условий в одном if
например в паскале можно if (a>b)and(a<10) в с++ как этосделать?
C++ Решение неравенства
Помогите с решением следующей задачи. Необходимо составить программу решения неравенства a*x^2+b<=0. Значения a и b вводятся с клавиатуры. При отсутствии решения или бесчисленном множестве решений должен быть напечатан соответствующий текст.
C++ Перегрузка оператора new и delete http://www.cyberforum.ru/cpp-beginners/thread354517.html
привет! подскажите, каким образом можно перегрузить операторы new и delete? заранее спасибо!
C++ Запись, чтение объектов в файл через указатели. не могу прочитать объекты из файла. Сломал голову. Все перепробовал. Препод отправил гуглить))). Писать что то вроде пишет? Но что? А читать при перезапуске программы отказывается. Говорит что в файле (0) объектов. И ошибка сегментирования (как правило выход за пределы цикла)??? #include<iostream> #include<cstdlib> #include<fstream> using namespace std; подробнее

Показать сообщение отдельно
yulicesar
4 / 4 / 0
Регистрация: 21.09.2011
Сообщений: 20
21.09.2011, 17:42     разработка объекта синхронизации
нужно создать объект синхронизации с разделяемыми уровнями блокировки: для чтения и для записи. Одновременно блокировка на чтение возможна из нескольких тредов, а на запись - только из одного, при этом чтобы не было читающих потоков.

Как это реализовать - понятно. Нужно 2 флага (мьютекса) и один семафор. Алгоритм:
при запросе на чтение
- ожидаем сброса флага ожидания доступа на запись
- ожидаем сброса флага записи, если запись инициирована из другого потока
- инкрементируем семафор чтения
при завершении чтения
- декрементируем семафор чтения

при запросе на запись
- ожидаем сброса флага ожидания записи если он установлен
- устанавливаем флаг ожидания записи
- ожидаем обнуления семафора чтения
- устанавливаем флаг записи, сбрасываем флаг ожидания записи
при завершении записи
- сброс флага записи

Но тут понадобилась еще одна функциональность: при нахождении в режиме чтения возможность "повысить" уровень привилегий до записи. И тут возникают проблемы: войти в контекст записи, находясь в контексте чтения, невозможно, так как семафор не будет обнулен - один читатель (текущий тред) все таки должен остаться в режиме чтения. Вывести его оттуда принудительно нельзя - возможно другой тред уже захватил очередь записи, взведя флаг ожидания записи, и вывод текущего треда из контекста чтения приведет к захвату монопольного доступа к ресурсу со стороны другого потока. А именно этого допускать нельзя! Основная идея этого функционала объекта синхронизации - отсутствие между чтением и повышением до записи монопольных доступов со стороны других тредов. В противном случае, если ожидать в читающем треде сброса флага ожидания записи - это приведет к дедлоку (пишущий тред в это время ожидает освобождения семафора чтения).
Подскажите пожалуйста как решить проблему

Добавлено через 55 минут
забыл добавить... ОС виндовс. хотя это непринципиально, поскольку проблема алгоритмическая
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru