了解pthread的spinlock

今天在阅读代码的时候看到了pthread_spin_lock函数, 比较好奇. 因为之前在写多线程程序的时候同步数据都是使用mutex信号量的机制. 出于好奇, 仔细看了一下相关资料. 比较不错的资料如下:

  1. stackoverflow上的相关讨论, 回答一针见血, 相当容易理解.
  2. 淘宝搜索技术博客上的两篇介绍spinlock的文章, 请看这里这里. 着重介绍了相关的原理以及进行了大量的测试. 对于里面的测试, 感觉第四个case比较有意义(相对比较符合实际情况).

总结一下, 当线程被spinlock锁住时, 并不会立即出让cpu, 而是会等待锁的释放. 一个显而易见的好处是如果临界区域的执行时间很短, 可以减少线程间的切换的开销. 比较适合使用spinlock的情景为:

  1. 被锁住区域的操作耗时非常短
  2. 不会有大量的线程处于锁等待的情况

我自己在测试的时候发现mutexspinlock没有太大的差别, 汗…. 还是觉得性能优化还是需要结合真实代码, 否则真的感觉没什么意义.

c

Comments