我有这个问题,但有些人要求提供更多信息。所以我提供更多信息。
我有一张智能卡和一个读卡器。用户可以随时从读卡器中取出卡片。智能卡有不同的块(16 字节),我可以写任何我想要的块。
现在我有这个作为线程运行的函数:
3 void function (void *p)
4 {
5 if(smartCardRemoved)
6 doSmth();
7 else
8 {
9 // Smart card is inside the reader
10 writeDataToCard(handle, blockNr, data1);
11 blockNr++;
12 writeDataToCard(handle, blockNr, data2);
13 blockNr=12;
14 readDataFromCard(blockNr, credit);
15 credit--;
16 writeDataToCard(cardHandle, blockNr, credit);
}
}
data1
并且data2
基本上是时间戳并且credit
是卡上的信用。现在问题来了。假设执行了第 10 步和第 12 步,这意味着将时间戳写入卡中。但是现在,用户从读卡器中取出卡——这意味着步骤 14、15、16 将不会被执行——这对我来说是个问题,因为时间戳被写入但信用没有减少。正如我所说,这是一个问题。因此,如果执行了步骤 10 和 12,则还必须执行步骤 14、15 和 16。有什么方法可以解决这个问题?
附言。尽管我需要检查一下,但可能无法使用单个提交来编写所有内容。
pps。现在我想起来了,如果说第 12 步成功,但第 15 步抛出异常或返回 false,我想我可能会遇到类似的问题。在这种情况下该怎么办?
我非常感谢周到和仔细的回答。谢谢你。