Нека кажем, че имам наречена таблица items
, Потребителят на моя webapp може да изтрие ред на items
таблица, но не искам да оставя таблицата празна.
Така че в момента имам подобен код в моето приложение:
if (itemsCount() <= 1) {
don"t delete;
}
else {
delete;
}
Но осъзнавам, че този код е уязвим за проблем с едновременността. Например, ако в момента размерът на items
е 2 и има две нишки, изпълняващи този код почти по едно и също време, таблицата може да се изпразни.
Мисля, че този проблем е доста често срещан за хората, които пишат уеб приложения. Хората трябва вече да са го решили. Какви са наличните решения за това?
Отговори:
0 за отговор № 1Най-често срещаното решение е да се използва транзакцияМениджър. Във вашия случай Transaction Manager ще координира изпълнението на нишката, за да се увери, че само една нишка наведнъж има достъп и актуализира таблицата.
Не споменахте кой език и каква среда използвате, но ако приемем Java и JEE, управлението на транзакциите е доста лесно. тук.