【Linux】自旋锁

 
自旋锁适用于短时间等待线程的场景;

#include 
//初始化
int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
//销毁 
int pthread_spin_destroy(pthread_spinlock_t *lock);
      

//加锁,轮询;
int pthread_spin_lock(pthread_spinlock_t *lock);

//加锁,申请不到直接返回;
int pthread_spin_trylock(pthread_spinlock_t *lock);
    

//解锁
int pthread_spin_unlock(pthread_spinlock_t *lock);


      
其他常见的各种锁
悲观锁:在每次取数据时,总是担心数据会被其他线程修改,所以会在取数据前先加锁(读锁,写锁,行锁等),当其他线程想要访问数据时,被阻塞挂起。
乐观锁:每次取数据时候,总是乐观的认为数据不会被其他线程修改,因此不上锁。但是在更新数据前,会判断其他数据在更新前有没有对数据进行修改。主要采用两种方式:版本号机制和CAS 操作。
CAS 操作:当需要更新数据时,判断当前内存值和之前取得的值是否相等。如果相等则用新值更新。若不等则失败,失败则重试,一般是一个自旋的过程,即不断重试。

你可能感兴趣的:(Linux,开发语言,linux)