#include <pthread.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
pthread_mutex_t mutex;
pthread_cond_t cond;
int cnt = 0;
void* fun1(void* argv){
fprintf(stdout, "enter fun1\n");
pthread_mutex_lock(&mutex);
while(cnt < 10){
//执行下面的语句后,mutex会被释放,可以供其他的线程使用
pthread_cond_wait(&cond, &mutex);
}
fprintf(stdout, "cnt is %d\n", cnt);
pthread_mutex_unlock(&mutex);
fprintf(stdout, "leave fun1\n");
}
void* fun2(void* argv){
fprintf(stdout, "enter fun2\n");
pthread_mutex_lock(&mutex);
cnt = 10;
//唤醒被cond阻塞的线程
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
fprintf(stdout, "leave fun2\n");
}
int main(){
int ret;
if(( ret = pthread_mutex_init(&mutex, NULL)) != 0){
fprintf(stderr, "initialize mutex error. msg:%s\n", strerror(ret));
}
if(( ret = pthread_cond_init(&cond, NULL)) != 0){
fprintf(stderr, "initialize cond error. msg:%s\n", strerror(ret));
}
pthread_t p1, p2;
if((ret = pthread_create(&p2, NULL, fun2, NULL))){
fprintf(stderr, "create thread 2 error\n");
}
if((ret = pthread_create(&p1, NULL, fun1, NULL))){
fprintf(stderr, "create thread 1 error\n");
}
pthread_join(p1, NULL);
pthread_join(p2, NULL);
return 0;
}
分享到:
相关推荐
多线程编程:条件变量使用。 打包文件包含两个文件:c文件源代码、Makefile文件,运行环境在Ubuntu14.04下,使用自带的gcc编译器,同学们只需将文件夹复制到某一目录下之后在终端执行:1.“make”生成“test”可执行...
主要介绍了C++多线程中的锁和条件变量使用,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
Linux互斥锁、条件变量和信号量 Linux互斥锁、条件变量和信号量 Linux互斥锁、条件变量和信号量 Linux互斥锁、条件变量和信号量 Linux互斥锁、条件变量和信号量 Linux互斥锁、条件变量和信号量 Linux互斥锁、条件...
pthread 条件变量,线程同步
讲述线程池如何创建以及代码的编写,条件变量的使用。
多线程之条件变量。 http://blog.csdn.net/tornodo
互斥锁、条件变量、信号量是系统为实现多线程(多进程)访问共享资源或共同协作的同步机制
条件变量所为一种线程安全对象,在多线程开发中,是有一些使用场景的,比如多个线程协作执行任务,或者生产者消费者模式的实现,都可以使用条件变量来进行线程控制。c语言做多线程开发,实现一个跨平台条件变量量...
互斥锁与条件变量详解 疑问全解
用C++封装的跨平台条件变量和互斥量,windows环境和linux环境都测试好用, 是理解条件变量和互斥量的好demo。
kettle8 模拟表输入查询表名,然后在另一个表输入中使用变量使用kettle8 模拟表输入查询表名,然后在另一个表输入中使用变量使用
而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起配合使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。...
关于读写者问题的源码,其中,采用的方式是临界区和条件变量相结合。
适合linux-c网络编程初学者学习的多线程控制,linux下编译通过,通过互斥锁和条件变量,最终线程的运行结果输出到txt文件中。
linux线程池 条件变量 互斥,讲解线程池的使用条件
利用条件变量实现两个线程之间的轮流顺序执行模型。实现多线程之间的互斥访问
多线程条件变量列子 c++
下面小编就为大家带来一篇浅谈Linux条件变量的使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
基于Linux C++的条件变量实现的生产者消费者模型,旨在进一步帮助读者理解条件变量的使用。