Редактирование: РОС, ответы на задачи

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

ПРЕДУПРЕЖДЕНИЕ: Длина этой страницы составляет 94 килобайт. Страницы, размер которых приближается к 32 КБ или превышает это значение, могут неверно отображаться в некоторых браузерах. Пожалуйста, рассмотрите вариант разбиения страницы на меньшие части.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.

Текущая версия Ваш текст
Строка 728: Строка 728:
=== Задача 4 ===
=== Задача 4 ===
-
Читатель не должен читать сырые данные. Читать могут сразу много. Писать – только один.
+
Решить задачу читателей и писателей.
-
 
+
-
<pre>
+
-
Int rd = 0; // количество читателей
+
-
Semaphore access = 1;
+
-
Semaphore reader = 1; // семафор для читателей
+
-
Semaphore writer = 1; // семафор для писателей
+
-
 
+
-
Void writer_enter(){
+
-
// мы должны дождаться, пока другие писатели закончат писать
+
-
P(writer);
+
-
 
+
-
// мы должны удостовериться, что в этот момент нет никаких читалелей
+
-
P(reader);
+
-
}
+
-
 
+
-
Void writer_leave(){
+
-
V(reader);
+
-
V(writer);
+
-
}
+
-
 
+
-
Void reader_enter(){
+
-
P(writer); // а нет ли внутри писателя?
+
-
 
+
-
// критическая секция
+
-
P(access);
+
-
Rd++;
+
-
If(rd == 1) P(reader); // теперь писатель будет знать, что кто-то читает
+
-
V(access);
+
-
V(writer);
+
-
}
+
-
Void reader_leave ( ) {
+
-
P(access);
+
-
Rd--;
+
-
If(rd == 0) V(reader); // теперь писатель будет знать, что никто больше не читает
+
-
V(access);
+
-
}
+
-
</pre>
+
=== Задача 5 ===
=== Задача 5 ===

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Шаблоны, использованные на этой странице:

Личные инструменты
Разделы