线程间使用的线程同步方法

最近写项目用到了线程池,之前了解线程池,但是一直没有自己实现,今天实现了线程池,现在总结下。

项目里用到的线程池是一次性把所有线程创建好,主线程接受任务调用添加任务的函数把任务添加到队列(运用了互斥锁)之后通知空闲队列中的线程有任务到来了(运用了条件变量)

//定义互斥锁   定义条件变量
pthread_mutex_t mutex;
pthread_cond_t cond;


//互斥锁  条件变量的初始化
pthread_mutex_init(&mutex, NULL);   //互斥锁的初始化    在函数内部初始化,在函数外会报错
pthread_cond_init(&cond, NULL);     //条件变量的初始化 


pthread_mutex_lock(&mutex);   //互斥锁加锁
pthread_mutex_unlock(&mutex); //互斥锁解锁


pthread_cond_signal(&cond); //当事件发生的时候就会发送信号给等待条件成立的线程
pthread_cond_wait(&cond, &mutex);  //等待条件成立的函数,条件不成立就会阻塞


int pthread_cond_broadcast(&cond);  //该函数用来对所有等待参数cond所指定的条件变量的线程解除阻塞,调用成功返回0  唤醒线程


/*条件变量和互斥量别忘了销毁*/
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&pool->cond);

这里讲一下pthread_cond_wait(&cond, &mutex); 

pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond, &mutex);

在pthread_cond_wait函数前加锁了,当条件还未成立的时候该函数会阻塞,这时候该函数会自动将互斥锁进行解锁,当条件成立后该函数会争夺互斥锁对互斥锁进行加锁,所以这就是条件变量和互斥锁为什么要搭配在一起使用的原因

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值