美文网首页我用 LinuxLinux学习之路Linux
Linux 开发之线程条件锁那些事

Linux 开发之线程条件锁那些事

作者: 先女木恬 | 来源:发表于2018-04-01 04:42 被阅读20次

条件锁即在一定条件下触发,那什么时候适合用条件锁呢,那当然是你在等待一个符合的条件下触发。一个常用的例子就是在线程中无限循环执行一个操作,但是这个操作并不是需要 一直执行而是在满足一定条件下执行。例如:

int changed = 0;

static pthread_mutext_t mtx = PTHREAD_MUTEX_INITALIZER;

static pthread_cond_t cond = PTHREAD_COND_INITALIZER;

void* thread_fun(void* argc)

{

while(true)

{

if(changed)

{

printf("i am changed");

}else

{

//方法一

sleep(1);

//方法二

pthread_mutex_lock(&mtx);

pthread_cond_wait(&cond,&mtx);

pthread_mutex_unloc(&mtx);

}

}

}

void main()

{

pthread_t threadId;

pthread_create(&threadId,NULL,thread_fun,NULL);

sleep(10);

changed = 1;

//方法二

pthread_cond_signal(&cond);

}

从上面的例子可以看出当changed变量为1的时候才执行操作,其他时间不执行,如果使用sleep函数,那么将会出现执行不及时的现象,如果使用条件锁的话那么会在条件改变的时候立即执行,效果比较好。

那如果使用条件锁呢?

首先是条件锁的创建,条件锁创建有两种方法,一种是静态方法,既使用静态变量的方式:

static pthread_cond_t cond = PTHREAD_COND_INITALIZER;

另外一种是动态的方法:

pthread_cond_init(pthread_cond_t *cv,const pthread_condattr_t *cattr);

其次是等待: pthread_cond_wait,此方法可以加超时的时间,如果没有超时的时间则是一直等待。

再次是触发:当达到条件之后使用 pthread_cond_signal通知

但是在多线程里面必须要配合互斥锁,因为在多线程的条件下如果不使用互斥锁,那么就有可能同时多个执行ptread_cond_wait会造成混乱。

相关文章

  • Linux 开发之线程条件锁那些事

    条件锁即在一定条件下触发,那什么时候适合用条件锁呢,那当然是你在等待一个符合的条件下触发。一个常用的例子就是在线程...

  • 线程同步与互斥

    Linux--线程编程 多线程编程-互斥锁 线程同步与互斥 互斥锁 信号量 条件变量 互斥锁 互斥锁的基本使用...

  • Linux线程同步

    Linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。 Linux线程同步-----互斥锁...

  • linux常见的三种线程同步方式是什么?

    Linux系统中,实现线程同步的方式大致分为六种,其中包括:互斥锁、自旋锁、信号量、条件变量、读写锁、屏障。其中最...

  • 线程同步之条件锁

    这是并发控制方案的系列文章,介绍了各种锁的使用及优缺点。自旋锁[https://github.com/pro648...

  • 并发编程-线程

    线程 GIL 守护线程 线程锁(互斥锁 and 递归锁) 信号量 事件 条件 定时器 1.线程: 特点在多线程的操...

  • 多线程编程那些事

    多线程编程那些事 标签:HPC、多线程、JMM、Volatile、锁、CPU多核构架、Happens before...

  • 互斥锁

    Linux线程-互斥锁pthread_mutex_t

  • 死磕 java同步系列之ReentrantLock源码解析(二)

    问题 (1)条件锁是什么? (2)条件锁适用于什么场景? (3)条件锁的await()是在其它线程signal()...

  • iOS-底层原理 29:锁的原理

    本文主要介绍常见的锁,以及synchronized、NSLock、递归锁、条件锁的底层分析 线程安全:线程安全:当...

网友评论

    本文标题:Linux 开发之线程条件锁那些事

    本文链接:https://www.haomeiwen.com/subject/iaqocftx.html