利用互斥锁+条件变量进行奇偶交替打印
【利用互斥锁+条件变量进行奇偶交替打印】线程1打印奇数,线程2打印偶数
#include
#include
#include#define MAX_COUNT 10
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
int count = 1;
//1 3 5 7 9
void* fun1(void *arg)
{
pthread_mutex_lock(&mutex);
while(count <= MAX_COUNT)
{
if(count % 2 == 1)
{
printf("This is threadfun1 %d\n", count);
count++;
pthread_cond_signal(&cond);
}
else
pthread_cond_wait(&cond, &mutex);
//sleep(1);
}
pthread_mutex_unlock(&mutex);
}
//2 4 6 8 10
void* fun2(void *arg)
{
pthread_mutex_lock(&mutex);
while(count <= MAX_COUNT)
{
if(count % 2 == 0)
{
printf("This is threadfun2 %d\n", count);
count++;
pthread_cond_signal(&cond);
}
else
pthread_cond_wait(&cond, &mutex);
}
pthread_mutex_unlock(&mutex);
}
int main(int argc, char const* argv[])
{
pthread_t tid[2];
pthread_create(&tid[0], NULL, fun1, NULL);
// sleep(1);
pthread_create(&tid[1], NULL, fun2, NULL);
for(int i=0;
i<2;
++i)
{
pthread_join(tid[i],NULL);
}
return 0;
}
结果
文章图片
推荐阅读
- 边走边看——锁
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- 【万伽复利】什么是复利(如何利用复利赚钱?)
- 《人性的枷锁》
- 别让习惯成为可怕的枷锁
- 苹果手机如何利用库乐队自制铃声
- stm32|基于STM32和freeRTOS智能门锁设计方案
- Java并发编程|Java并发编程 - 深入剖析ReentrantLock之非公平锁加锁流程(第1篇)
- 偏向锁、轻量级锁、重量级锁的升级以及区别
- 解锁新技能