一句话:同一个操作,执行 1 次和重复执行 N 次,最终效果完全一样,不会产生副作用、不会越搞越坏。
数学定义
设函数 ,定义域与陪域相同。若满足:
则称 是幂等函数。
含义:把函数输出再次代入函数,得到的结果和调用一次完全一样,迭代多次不会改变结果:
不管迭代多少次,结果都等价于只执行一次 。
计算机中的例子
flock 加锁(函数视角)
设 为对该 fd 执行 flock(LOCK_EX):
- 状态空间:{未锁,已排他锁}
满足 ,这个操作是幂等的。
普通 pthread_mutex_lock(非幂等)
设 为 pthread_mutex_lock:
,不满足幂等。
rm -f file
,幂等。
POST 创建订单(非幂等)
,不是幂等。