Учебный курс: Многопоточное программирование
Кафедра: ИС Факультет: ИТиП
Лабораторная работа №3. Атомарные операции,
сигналы и критические секции.
Выполнил: Группа: 5516
Преподаватель:
Задание
|
Вариант
|
Атомарные операции
|
Сигналы
|
Критические секции
|
|
1
|
2
|
3
|
4
|
5
|
1
|
2
|
1
|
2
|
|
12
|
|
×
|
|
|
×
|
×
|
|
×
|
|
Атомарные операции
Осуществить безопасное
декрементирование целочисленной переменной из двух потоков за счёт
использования атомарной декрементации(Interlocked.Decrement).
Осуществить подсчёт суммы
элементов массива целых чисел из двух потоков за счёт использования атомарного
присваивания со сравнением (Interlocked.Add). Первый поток должен обрабатывать чётные элементы массива, второй
поток – нечётные.
Сигналы
Реализовать расчёт значения длительно вычисляемой
математической функции (на выбор студента, например, факториала, фрактала; при
необходимости допускается имитировать задержку при выполнении такого расчёта) с
возможностью досрочно прервать выполнение расчёта (AutoResetEvent). Первый поток должен вычислять значение функции, а второй –
отображать процентное выполнение расчёта с возможностью его прервать.
Критические секции
1. Реализовать имитацию перевода денежных средств с одного счёта на другой
с использованием транзакции, за счёт применения критической секции (Monotor). Для моделирования счёта использовать отдельный класс. Обеспечить
обработку трёх запросов на перевод денежных средств с одного счёта, поступивших
с минимальным временным интервалом.
Творческая часть: реализовать
имитацию подсчёта количества просмотров страниц сайта, для каждого из которых
запрос обрабатывается в отдельном потоке с помощью пула потоков. Использовать
атомарные операции (Interlocked)..
Входные данные
отсутствуют
Выходные данные
Консоль
**************************Asyncron Intrloced Decrement**************************
Thread
first TestNum = 9
Thread
first TestNum = 8
Thread
first TestNum = 7
Thread
second TestNum = 6
Thread
first TestNum = 5
Thread
second TestNum = 4
Thread
first TestNum = 3
Thread
second TestNum = 2
Thread
first TestNum = 1
Thread
second TestNum = 0
********************Asyncronus
Intrloced Summ Array elements********************
Even
thread Add 10 Total summ = 10
Even
thread Add 0 Total summ = 23
Odd
thread Add 13 Total summ = 23
Odd
thread Add 22 Total summ = 88
Odd
thread Add 12 Total summ = 100
Odd
thread Add 2 Total summ = 102
Odd
thread Add 0 Total summ = 102
Even
thread Add 43 Total summ = 66
Even
thread Add 23 Total summ = 125
Even
thread Add 3 Total summ = 128
********************Factorial
search with progress status***********************
Quest
factorial "77" started.
Press
<Esr> to End operation
Progress
22%
********************Test
Accaunt Transaction Servicce***************************
Accounts
before remittance operation
[id:1]
[ballance:10000]
[id:2]
[ballance:10000]
[id:3]
[ballance:10000]
Impossible
Transaction- - - - - - - - - - - - - - - - - - - - - - -
Sender[id]
$ Adress[id] Date
1 5000$ 2 2010-12-28 11:24:21Z
Transaction
Success+ + + + + + + + + + + + + + + + + + + + + + + +
Sender[id]
$ Adress[id] Date
1 5000$ 3 2010-12-28 11:24:21Z
Transaction
Success+ + + + + + + + + + + + + + + + + + + + + + + +
Sender[id]
$ Adress[id] Date
1 5000$ 2 2010-12-28 11:24:21Z
Accounts
after remittance operation
[id:1]
[ballance:0]
[id:2]
[ballance:15000]
[id:3]
[ballance:15000]
*********************************Creativ
part**********************************
<Page
Open>11:24:21<1,00>
<Page
Open>11:24:21<2,00>
<Page
Open>11:24:22<3,00>
<Page
Open>11:24:22<4,00>
<Page
Open>11:24:23<5,00>
<Page
Open>11:24:23<6,00>
<Page
Open>11:24:23<7,00>
<Page
Open>11:24:24<8,00>
<Page
Open>11:24:24<9,00>
<Page
Open>11:24:25<10,00>
<Page
Open>11:24:25<11,00>
<Page
Open>11:24:25<12,00>
<Page
Open>11:24:26<13,00>
<Page
Open>11:24:26<14,00>
<Page
Open>11:24:27<15,00>
Calculate Rtesults
expected
page open: 15
received
page open: 15
Для
продолжения нажмите любую клавишу . . .
Архив проекта
