锁的基本原理(2)
cas自旋锁引出的问题
评价锁的一个重要因素就是公平性, 我们可以看到上节我们提供了cas自旋锁:
评价锁的一个重要因素就是公平性, 我们可以看到上节我们提供了cas自旋锁:
这两个寄存器被用来访问一些线程私有数据, 其中fs
被用户态程序使用, gs
被内核态使用。应该知道, 在使用pthread时, 可以通过pthread_self()
拿到当前线程的线程id, 其实就是从fs
里面拿数据。至于为什么能这么做, 可以参考这篇文章, 详细介绍了linux
实现per-task数据的原理。作为应用, 我们只需通过glibc间接的访问errbo
和pthread_self()
即可。例如看glibc的代码:
书接上回, 我们介绍了信号栈帧
, 也就是下面这个东西: