Конкурентно програмиране: Разлика между версии

Изтрито е съдържание Добавено е съдържание
м overlinking
Xqbot (беседа | приноси)
м Bot: Replace deprecated <source> tag and "enclose" parameter
Ред 27:
Конкурентното програмиране има за цел да структурира компютърната програма, като я раздели на процеси, които могат да се изпълняват независимо един от друг. Взаимодействието и коректната комуникация между различните процеси и координацията на конкурентния достъп до споделени ресурси са основните предизвикателства при конкурентното програмиране.<ref name=benari2006/>
Потенциални проблеми включват [[условие на състезание]] (race condition), [[взаимно блокиране]] (deadlock) и [[Ресурсен глад (компютърни науки)|ресурсен глад]] (resource starvation). Например, разгледайте следния алгоритъм за теглене на суми от разплащателна сметка представена чрез споделеният ресурс „balance“:
<sourcesyntaxhighlight lang="text" line highlight="3,5">
bool withdraw(int withdrawal)
{
Ред 37:
return false;
}
</syntaxhighlight>
</source>
 
Представете си, че <code>balance=500</code> и два конкурентни процеса извикват <code>withdraw(300)</code> и <code>withdraw(350)</code>. Ако ред 3 при двете операции се изпълни преди ред 5, и двете операции ще намерят условието <code>balance >= withdrawal</code> за вярно и ще се изпълни намаляването на баланса с изтеглените суми. Но, тъй като и двата процеса се изпълняват, общата изтеглена сума ще е по-голяма от оригиналния баланс. Такива проблеми със споделени ресурси изискват употребата на [[контрол на конкурентността]] (concurrency control) или [[не-блокиращ алгоритъм|не-блокиращи алгоритми]] (non-blocking algorithm).