Привет представьте у меня есть такой код:как сделка с атомарности ситуации
0. void someFunction()
1. {
2. ...
3. if(x>5)
4. doSmth();
5.
6. writeDataToCard(handle, data1);
7.
8. writeDataToCard(handle, data2);
9.
10. incrementDataOnCard(handle, data);
11. }
Вещь следующее. Если выполняется этап 6 & 8, а затем кто-то говорит, что он удаляет карту - тогда операция 10 не будет выполнена успешно. Но это будет ошибкой в моей системе. Значение, если выполнены 6 & 8, также должно быть выполнено 10. Как бороться с такими ситуациями?
Краткое описание: Что я хочу сказать, после шага 8 кто-то может удалить мою физическую карту, а это значит, что шаг 10 никогда не будет достигнут, и это вызовет проблему в моей системе. А именно, карта будет инициализирована неполными данными.
Предпочтительно, чтобы вы писались на карточку только один раз, как часть одной транзакции. – moswald
Не выполняйте действия 6 и 8, если у вас нет гарантии, что карта не будет удалена. –
Используйте try/catch, чтобы остановить исключение из-за сбоя вашего приложения? Попросите функцию 'incrementDataOnCard()' проверить, существует ли карта? Сколько времени займет запись - можете ли вы выполнить их внутри одной транзакции, которая зависит от флага, который контролирует «состояние карты»? – newfurniturey