КАТЕГОРИИ:


Астрономия- (809) Биология- (7483) Биотехнологии- (1457) Военное дело- (14632) Высокие технологии- (1363) География- (913) Геология- (1438) Государство- (451) Демография- (1065) Дом- (47672) Журналистика и СМИ- (912) Изобретательство- (14524) Иностранные языки- (4268) Информатика- (17799) Искусство- (1338) История- (13644) Компьютеры- (11121) Косметика- (55) Кулинария- (373) Культура- (8427) Лингвистика- (374) Литература- (1642) Маркетинг- (23702) Математика- (16968) Машиностроение- (1700) Медицина- (12668) Менеджмент- (24684) Механика- (15423) Науковедение- (506) Образование- (11852) Охрана труда- (3308) Педагогика- (5571) П Arhitektura- (3434) Astronomiya- (809) Biologiya- (7483) Biotehnologii- (1457) Военно дело (14632) Висока технологиите (1363) Geografiya- (913) Geologiya- (1438) на държавата (451) Demografiya- ( 1065) Къщи- (47672) журналистика и SMI- (912) Izobretatelstvo- (14524) на външните >(4268) Informatika- (17799) Iskusstvo- (1338) История- (13644) Компютри- (11121) Kosmetika- (55) Kulinariya- (373) култура (8427) Lingvistika- (374) Literatura- (1642) маркетинг-(23,702) Matematika- (16,968) инженерно (1700) медицина-(12,668) Management- (24,684) Mehanika- (15423) Naukovedenie- (506) образование-(11,852) защита truda- (3308) Pedagogika- (5571) п Политика- (7869) Право- (5454) Приборостроение- (1369) Программирование- (2801) Производство- (97182) Промышленность- (8706) Психология- (18388) Религия- (3217) Связь- (10668) Сельское хозяйство- (299) Социология- (6455) Спорт- (42831) Строительство- (4793) Торговля- (5050) Транспорт- (2929) Туризм- (1568) Физика- (3942) Философия- (17015) Финансы- (26596) Химия- (22929) Экология- (12095) Экономика- (9961) Электроника- (8441) Электротехника- (4623) Энергетика- (12629) Юриспруденция- (1492) Ядерная техника- (1748) oligrafiya- (1312) Politika- (7869) Лево- (5454) Priborostroenie- (1369) Programmirovanie- (2801) производствено (97182) от промишлеността (8706) Psihologiya- (18,388) Religiya- (3217) с комуникацията (10668) Agriculture- (299) Sotsiologiya- (6455) спортно-(42,831) Изграждане, (4793) Torgovlya- (5050) превозът (2929) Turizm- (1568) физик (3942) Filosofiya- (17015) Finansy- (26596 ) химия (22929) Ekologiya- (12095) Ekonomika- (9961) Telephones- (8441) Elektrotehnika- (4623) Мощност инженерно (12629) Yurisprudentsiya- (1492) ядрена technics- (1748)

Анализ на машина беда - потребителят по отношение на синхронизация на общ буфер

история на синхронизация

Методи за процеси за синхронизация се считат за най-рано 1960. в новаторска работа от Е. Dijkstra [17]. Беше отбелязано, че паралелни процеси дял достъп до споделени данни може да наруши тяхната цялост. Поддържането на целостта на споделен данни изисква прилагането и използването на рационализиране механизми взаимодействащи процеси (или нишки).

Нека се върнем към въпроса вече разгледани от нас (парадигма) производител между процес - на потребителите (виж "Методи за процесите на взаимодействие."). Съществува обща буфер на ограничена дължина. Метод машина добавя генерираните елементи към него, използва процес към потребители, и се отстранява използва батерията. Добавяне на представяне на променлива брояч ограничен буфер, което увеличава процеса proivoditel, добавяне на друг елемент на буфера и намалява процес отнема, използване и отстраняване на елемент от буфера.

Припомнете си, идеята за ограничен буфер в C език (виж "Методи за процеси на взаимодействие.") И да го удължи до променливата брояча:

# определят BUFFER_SIZE 1000 / * или друга специфична стойност * /

typedef структура {

, , ,

} Т;

т буфер [BUFFER_SIZE];

Int в = 0;

Int от = 0;

Int брояч = 0;

Сега ние променят процеса на прилагане на производителя и на процеса на потребителите (виж "процеси Методи за взаимодействия"). С добавянето на съответната промяна в променливата брояч:

Метод на производство:

т nextProduced; / * Генерирани от следващия елемент * /

докато (1) {/ * безкраен цикъл * /

докато (брояч == BUFFER_SIZE) == навън)

; / * Изчакайте, докато буферът е пълна * /

буфер [в] = nextProduced; / * Генерирани елемент * /

в = (в + 1)% BUFFER_SIZE;

брояч ++;

}

Потребителски процеси:

т nextConsumed; / * Следваща използван артикул * /

докато (1) {/ * безкраен цикъл * /

докато (брояч == 0)

; / * Изчакайте, докато буферът е празна * /

nextConsumed = буфер [от]; / * Използвайте т * /

от = (от + 1)% BUFFER_SIZE;

counter--;

}

Възниква въпросът: как правилно модифицирани алгоритми, които използват променлива брояч? Не съвсем. Проблемът е, че на гишето в действителност е общ ресурс, към който едновременно да отваряте две паралелни процеси. Ако се появи лечение в същото време, брояч променлива в крайна сметка може да се окаже неправилно в държавата. Поради това е необходимо, че всеки един от процесите, чрез увеличаване или намаляване на стойността му ще има изключителен достъп до него, а другият процес не може в този момент "грабеж" на стойността на променливата. С други думи, на гишето операция ++ и насрещни трябва да бъде изпълнено автоматично (виж гл. 9). Спомнете си, че атомната операция - е такава операция, която трябва да се извърши изцяло, без никакви прекъсвания; където операцията, осъществявана от един от процесите да бъде неразделна част от гледна точка на друг метод.



брои ++ count- работа и може да се прилага в асемблер ниво, както следва:

брои ++:

register1 = брояч

register1 = register1 + 1

брояч = register1

count--:

register1 = брояч

register1 = register1 - 1

брояч = register1

където register1 - регистър апарат.

Проблемът е, че ако и двете производителя и опитът на потребителите да променят брояч променлива в даден момент, ukaznoy оператори монтажен трябва да се извърши заедно (на парчета).

Специфичната изпълнението на такова съвместно изпълнение зависи от начина, по който има график за процеси - на производителя и на потребителите, както и за прилагането (или неизползването) във всеки случай appparatnyh оптимизации, например, увеличаване (намаляване) стойности от един часовник регистър цикъл с една единствена команда (увеличение / намаляване).

Помислете за ефекта на преплитане на конкретен пример. Да приемем, че първоначалната стойност на променливата брояч в някакъв момент е 5. Изпълнение на процеси в съвместно режим (разделяне) може да доведе до следните ефекти:

Производител: register1 = брояч (register1 = 5)

Производител: register1 = register1 + 1 (register1 = 6)

потребителите: REGISTER2 = брояч (REGISTER2 = 5)

потребителите: REGISTER2 = REGISTER2 - 1 (REGISTER2 = 4)

Производител: брояч = register1 (брояч = 6)

потребителите: брояч = Counter2 (брояч = 4)

По този начин, брояч стойност в крайна сметка може да бъде равна на 4 или 6, докато правилната гишето стойност е равна на 5.

Ситуацията, в която процесите могат да си взаимодействат в паралел (едновременно) да се свържат с общ данни се нарича конкуренция за общи данни (раса състояние). За да се избегне тази ситуация, процесът трябва да бъдат синхронизирани.

<== предишната лекция | Следващата лекция ==>
| Анализ на машина беда - потребителят по отношение на синхронизация на общ буфер

; Дата на добавяне: 01.20.2014; ; Отзиви: 77; Нарушаването на авторски права? ;


Ние ценим Вашето мнение! Беше ли полезна публикува материал? Да | не



ТЪРСЕНЕ:


Вижте също:



ailback.ru - Edu Doc (2013 - 2017) на година. Не е авторът на материала, и предоставя на студентите възможност за безплатно обучение и употреба! Най-новото допълнение , Ал IP: 66.249.93.155
Page генерирана за: 0.017 сек.