Задание 8 (индивидуальное): разделяемая память

Указания

  • Согласовывать взаимодействие процессов необходимо при помощи общих объектов синхронизации.

  1. Реализовать программу для игры двух пользователей в игру «крестики-нолики» на поле размеров, как минимум, 3 × 3. Процесс должен дождаться запуска взаимодействующего процесса. Далее случайным образом определяется очерёдность ходов, после чего оба процесса по очереди ждут от пользователей ввода данных. Выполнить задание при помощи интерфейса Windows API.

  2. Реализовать программу, которая дожидается запуска заданного количества экземпляров своего процесса, которым назначаются последовательные номера. Дальше первый процесс генерирует последовательность случайных чисел, которые передаёт по одному второму процессу. Второй процесс увеличивает каждое получаемое число на 1 и передаёт дальше. Последний процесс после увеличения числа выводит его на печать. Передачу значений можно организовать при помощи массива размером, равным количеству процессов минус один. Выполнить задание при помощи интерфейса Windows API.

  3. Реализовать программу, которая дожидается запуска заданного количества экземпляров своего процесса, которым назначаются последовательные номера. Дальше первый процесс генерирует случайное число, которое передаёт второму процессу. Второй процесс увеличивает число на 1 и передаёт дальше. Последний процесс после увеличения числа передаёт его первому процессу, который после его увеличения выводит на печать. Передачу значений можно организовать при помощи массива размером, равным количеству процессов. Выполнить задание при помощи интерфейса Windows API.

  4. Реализовать программу для игры двух пользователей в игру «морской бой». Расположение кораблей игрока можно считывать из файла в виде матрицы занятости клеток без проверки на корректность. Процесс должен дождаться запуска взаимодействующего процесса. Далее случайным образом определяется очерёдность ходов, после чего каждый из процессов в свою очередь ждёт от пользователя ввода данных. Если игрок угадывает клетку, в которой находится корабль противника, он получает право следующего хода. В противном случае право хода передаётся противнику. Выполнить задание при помощи интерфейса Windows API.

  5. Реализовать две программы, одна из которых генерирует последовательность целых чисел:

    xi = [A sin (ω i)]        ∀ i = 0, 1, ..., T

    для заданных A, ω и T. (Здесь квадратные скобки обозначают операцию округления). После генерирования очередной порции данных программа записывает их в буфер ограниченного размера и дожидается, пока другая программа не прочитает их оттуда. Вторая программа после получения очередной порции данных должна выводить их на печать. Выполнить задание при помощи интерфейса Windows API.

  6. Реализовать две программы, первая из которых, будучи запущенной в нескольких экземплярах процесса, получает свой порядковый номер и записывает его заданное количество раз в буфер ограниченного размера (синхронизируясь с остальными процессами). Другая программа должна последовательно забирать эти данные из буфера и выводить на печать. Выполнить задание при помощи интерфейса Windows API.

  7. Реализовать программу для игры двух пользователей в игру «крестики-нолики» на поле размеров, как минимум, 3 × 3. Процесс должен дождаться запуска взаимодействующего процесса. Далее случайным образом определяется очерёдность ходов, после чего оба процесса по очереди ждут от пользователей ввода данных. Выполнить задание при помощи интерфейса POSIX.

  8. Реализовать программу, которая дожидается запуска заданного количества экземпляров своего процесса, которым назначаются последовательные номера. Дальше первый процесс генерирует последовательность случайных чисел, которые передаёт по одному второму процессу. Второй процесс увеличивает каждое получаемое число на 1 и передаёт дальше. Последний процесс после увеличения числа выводит его на печать. Передачу значений можно организовать при помощи массива размером, равным количеству процессов минус один. Выполнить задание при помощи интерфейса POSIX.

  9. Реализовать программу, которая дожидается запуска заданного количества экземпляров своего процесса, которым назначаются последовательные номера. Дальше первый процесс генерирует случайное число, которое передаёт второму процессу. Второй процесс увеличивает число на 1 и передаёт дальше. Последний процесс после увеличения числа передаёт его первому процессу, который после его увеличения выводит на печать. Передачу значений можно организовать при помощи массива размером, равным количеству процессов. Выполнить задание при помощи интерфейса POSIX.

  10. Реализовать программу для игры двух пользователей в игру «морской бой». Расположение кораблей игрока можно считывать из файла в виде матрицы занятости клеток без проверки на корректность. Процесс должен дождаться запуска взаимодействующего процесса. Далее случайным образом определяется очерёдность ходов, после чего каждый из процессов в свою очередь ждёт от пользователя ввода данных. Если игрок угадывает клетку, в которой находится корабль противника, он получает право следующего хода. В противном случае право хода передаётся противнику. Выполнить задание при помощи интерфейса POSIX.

  11. Реализовать две программы, одна из которых генерирует последовательность целых чисел:

    xi = [A sin (ω i)]        ∀ i = 0, 1, ..., T

    для заданных A, ω и T. (Здесь квадратные скобки обозначают операцию округления). После генерирования очередной порции данных программа записывает их в буфер ограниченного размера и дожидается, пока другая программа не прочитает их оттуда. Вторая программа после получения очередной порции данных должна выводить их на печать. Выполнить задание при помощи интерфейса POSIX.

  12. Реализовать две программы, первая из которых, будучи запущенной в нескольких экземплярах процесса, получает свой порядковый номер и записывает его заданное количество раз в буфер ограниченного размера (синхронизируясь с остальными процессами). Другая программа должна последовательно забирать эти данные из буфера и выводить на печать. Выполнить задание при помощи интерфейса POSIX.