【发布时间】:2018-10-02 12:39:10
【问题描述】:
我有一个嵌入式服务器,可以随时拔掉电源。有没有一种优雅的方式来实现事务性 c++ 计数器?在最坏的情况下,它应该返回之前的 ID。
我有一个定期生成报告文件的嵌入式服务器。服务器没有时间或网络连接,所以我想增量生成报告文件。但是,下载报告文件后,我想删除报告文件,同时维护计数器:
report00001.txt
report00002.txt
report00003.txt
report00004.txt
// all the files have been deleted
report00005.txt
...
我想使用这样的代码:
int last = read_current_id("counter.txt");
last++;
// transaction begin
write_id("counter.txt", last);
// transaction end
【问题讨论】:
-
“我想使用这样的代码”是什么让你不这样做?
-
@Swordfish 大概是担心
write_id的原子性... -
是的,问题涉及 write_id 的原子性。写ID必须删除'counter.txt'的内容。如果此时拔掉设备会发生什么?
标签: c++ counter transactional