# 重要的编程概念（甚至在嵌入式系统上）第一部分：幂等

2014年8月26日5条评论

## 幂等

• A组
1. 出售100股Glyptocratic Incorporated（GLYP）的股票
2. 等待您的一个学生打电话给我，并花20分钟帮助他们完成本周的工作’功课让其他人受苦
• B组
1. 那里 should be \$1180 left in bank account; if there is, withdraw \$60
2. 车漆成红色
3. 去除汽车挡风玻璃上的贴纸

• 您 sold 300 shares of GLYP
• 您 spent an hour helping 3 students with their homework
• 那里’s \ $1120在您的银行帐户中—第一次去银行时，您取出了\$ 60，第二次去银行时，您感到有些无法满足
• 您r car is red, 和 you have two bills from Ed’s Body Shop (and you’不确定昨天的车是否也红色）
• 您的汽车挡风玻璃上没有贴纸— the ones that were there are now in the trash 后 an hour of grueling work in the garage, 和 the three additional times you went out to your car, you were so glad to see that you didn’t have to do anything 后 all.

In programming, this sort of thing happens with distributed systems. And 之前 you say that distributed systems programming is one of those fancy things you don’无需处理，无论何时使用网络插座，串行端口或SPI / I2C芯片— anywhere it’不能100％保证您的数据正确到达，’是不可靠的通讯渠道，因此您必须准备重试任何通讯事务。

The next time you have to design a device with inputs, think carefully 之前 you add a push button. Knobs 和 toggle switches are very effective devices that don’幂等有问题。您可以’t错误地将电灯开关打开两次，或错误地将恒温器拨盘两次打开到同一位置。

I’前面提到了两种幂等的解决方案：一种是发送带有事务ID的消息，另一种是发送带有目标状态的消息，该消息描述了所需的最终结果。第三种幂等技术可用于并发编程，它可以通过以下方式发送消息：“before” 和 an “after” state: include the assumed state 之前 the operation in question, in addition to the desired end result. This approach is used in the 比较和交换 用于实现信号量的操作。

• 非等幂运算：

• 增加一个变量
• 切换状态
• 前进到下一个状态
• 幂等运算：

• 如果当前状态与X匹配，则将其更改为Y
• 将变量设置为Y
• 如果尚未执行具有唯一ID X的事务，则执行该事务

有一天我们会找到它，开尔文联系

重要的编程概念（甚至在嵌入式系统上）第二部分：不变性

[-]

[-]

[-]

[-]

[-]