写了好长时间,但是废掉了,想不到办法,唉
如果有好办法的话请不吝赐教。
1
nebkad OP 谁能想到呢,写个 spinlock 都需要引入分布式算法。
在极其有限的内存中(一个 int )挤出两个 bit 用来标记:1.受控取消争夺锁状态,2.有线程崩溃后的 非受控取消争夺锁状态。 先说 1 受控取消 取消者要设置标记,然后把自己的 ticket number N 放在 atomic_int 里面,才可以安全退出, 然后 ticket number 是 N + 1 的等待者检测到这个变化,也把 N + 1 防盗 atomic_int 里面,继续等待。 如此类推,就可以顺利地把所有等待者都顺利更新 ticket 。 第 n 个受影响的等待者会发现自己更新之后,N + n 一直不会变,那么他来负责清除这个受控取消状态的标记。 |