Опитвам се да разработя приложение, което се състои от набор от нишки, използвайки алгоритъм за кражба на работа за едновременно изпълнение на задачи.
Тези задачи
- достъп до предварително определен набор от обекти;
- трябва "атомично" да придобие разрешения за четене/запис на всички обекти, до които има достъп, преди действително да стартира;
- при завършване (и гарантирано, че в крайна сметка ще завършат) освобождават предметите, които придобиват.
Един възможен начин за решаване на този проблем е всяка нишка да вземе задача в даден момент, след което да се опита да заключи всеки от обектите, като използва предварително определен ред. Ако поне едно не успее, освободете всички ключалки и продължете с друга задача.
Този метод обаче увеличава вероятността от гладуване на задачи с големи зависимости на обекти и дори може да доведе до активни заключвания.
Има ли друг метод за придобиване на набор от ключалки, като същевременно се увеличи едновременността? (без глобално заключване) Или може би да промените системата по начин, който вече не е необходим? Ако е така, има ли добри документи за това?
ps: Както thiton отговори, това е обобщена версия на проблема с „философите за хранене“. Търся нецентрализирани решения, по-специално алгоритми, които се справят добре при голямо натоварване (добавяне и изтриване на задачи).