perrynzhou

专注于系统组件研发

0%

linux 锁

linux 锁

linux中有哪几种临界资源访问保护机制

  • 互斥锁:核心以pthread_mutex_t为核心
  • 自旋锁:核心以pthread_spinlock_t为核心
  • 原子操作:自定义C函数封装汇编

各种临界资源保护机制的用法

  • pthread_t :在多线程情况下,线程会切换,但是某个线程方法进入以pthread_mutex_t加锁的临界资源
  • pthread_spinlock_t:多线程情况下,不会产生线程切换,某个线程进入以pthread_spinlock_t加锁的临界资源时候,线程无法获取锁就会自旋等待,这个pthread_spinlock_t用在操作非常简单,等待时间非常短的情况下。
  • 原子操作:在函数内部嵌入asm汇编,用一条汇编指令表达。

i++ 自增操

  • i++ 操作:i++操作编译成汇编后,都是三条指令,线程执行任何一个汇编指令时候都可能发生线程切换,多线程情况下不能保证i++是原子操作
    1
    2
    3
    1.move [var],%ebx
    2.incr %ebx
    3.move %ebx [var]