0
点赞
收藏
分享

微信扫一扫

Linux下线程同步

耳一文 2022-03-12 阅读 63
开发语言

Linux下多线程对同一全局变量的读写可能会因为时序问题产生影响,所以才有了线程同步这一概念,线程同步解决了线程访问问题,同步的方式有以下几种:

互斥锁

        pthread_mutex_t lock;

        //初始化互斥锁

        int ret=pthread_mutex_init(&lock,NULL);

        //加锁

        pthread_mutex_lock(&lock);

        //解锁

        pthread_mutex_unlock(&lock);

        //销毁锁

        pthread_mutex_destroy(&lock);

读写锁

        将锁分成读锁和写锁,读可以几个线程同时访问,同一时刻只能有一个写锁可以访问共享资源

        //初始化读写锁

        pthread_rwlock_init();

        //销毁锁

        pthread_rwlock_destroy();

        //读和写

        pthread_rwlock_rdlock();

        pthread_rwlock_wrlock();

        pthread_rwlock_unlock();

自旋锁

一个线程访问共享资源,其他线程在等待解锁期间自旋,所以自旋锁不应该持有时间过长,时间长最好用信号量。

调用的函数,主要用在多处理器中:

pthread_spin_init();

pthread_spin_destroy();

pthread_spin_lock();

pthread_spin_unlock();

信号量

信号量是一个计数器,用于控制访问共享

//初始化信号量

sem_init();

//信号量-1,表示资源被访问

sem_wait();

//信号量+1,资源未被访问

sem_post();

//销毁信号量

sem_destroy();

条件变量

可以理解为创建两个线程,一个生产者,一个消费者

生产者:生产不超过某一值时,不断生产,超过设定值后阻塞等待消费者消费;

消费者:只要生产数量不为0则继续消费,直到为0时阻塞等待生产。

pthread_cond_init();

pthread_cond_wait();

pthread_cond_signal();

屏障

允许每个线程等待直到所有的合作线程都到达某一点,然后从该点继续执行

本文参考

Linux下线程同步机制(吐血整理)_LUCAS004的博客-CSDN博客_linux多线程同步机制

举报

相关推荐

0 条评论