C/C++两个线程交替打印

C语言第一种方式

C语言第二种方式

C++实现的第一种方式

C语言第一种方式

实现思想主要是让两个线程互相唤醒对方来交替打印数字

#include #include #include #include int g_num = 1;

pthread_mutex_t mutex;

pthread_cond_t cond1,cond2;

void* thread1(void* arg)

{

while(1)

{

pthread_mutex_lock(&mutex);

//如果需要交替打印一定范围(例如1-10)内的数字,那么可以加上下面两行代码

//if(g_num > 10)

//exit(1);

printf("Thread1: %d \n",g_num);

g_num ++;

pthread_cond_signal(&cond2);

pthread_cond_wait(&cond1,&mutex);

pthread_mutex_unlock(&mutex);

sleep(1);

}

return NULL;

}

void* thread2(void* arg)

{

while(1)

{

//这个sleep(1)加在前面是因为开启线程时有可能是线程2先打印,

//导致变成thread2输出奇数,threa1输出偶数。为了避免这种情况,可以在延迟下线程2的打印。

sleep(1);

pthread_mutex_lock(&mutex);

printf("Thread2: %d \n",g_num);

g_num++;

pthread_cond_signal(&cond1);

pthread_cond_wait(&cond2,&mutex);

pthread_mutex_unlock(&mutex);

}

return NULL;

}

int main()

{

pthread_t p1,p2;

pthread_mutex_init(&mutex,NULL);

pthread_cond_init(&cond1,NULL);

pthread_cond_init(&cond2,NULL);

pthread_create(&p1,NULL,thread1,NULL);

pthread_create(&p2,NULL,thread2,NULL);

pthread_join(p1,NULL);

pthread_join(p2,NULL);

pthread_mutex_destroy(&mutex);

pthread_cond_destroy(&cond1);

pthread_cond_destroy(&cond2);

return 0;

}

运行结果如下:

C语言第二种方式

思想主要是引入第三个线程来管理唤醒信号

#include #include #include #include int g_num = 0;

pthread_mutex_t mutex;

pthread_cond_t cond1,cond2;

void* thread1(void* arg)

{

while(1)

{

pthread_mutex_lock(&mutex);

pthread_cond_wait(&cond1,&mutex);

printf("Thread1: %d \n",g_num);

pthread_mutex_unlock(&mutex);

sleep(1);

}

return NULL;

}

void* thread2(void* arg)

{

while(1)

{

pthread_mutex_lock(&mutex);

pthread_cond_wait(&cond2,&mutex);

printf("Thread2: %d \n",g_num);

pthread_mutex_unlock(&mutex);

sleep(1);

}

return NULL;

}

void* thread3(void* arg)

{

while(1)

{

//有可能出现线程3都运行了1次了,线程1还没开始,导致不是从1开始打印,为了避免这种情况,所以先让管理线程休眠一会。

sleep(1);

pthread_mutex_lock(&mutex);

++g_num;

pthread_mutex_unlock(&mutex);

if((g_num % 2) == 0)

pthread_cond_signal(&cond2);

else if((g_num % 2) == 1){

pthread_cond_signal(&cond1);}

}

return NULL;

}

int main()

{

pthread_t p1,p2,p3;

pthread_mutex_init(&mutex,NULL);

pthread_cond_init(&cond1,NULL);

pthread_cond_init(&cond2,NULL);

pthread_create(&p1,NULL,thread1,NULL);

pthread_create(&p2,NULL,thread2,NULL);

pthread_create(&p3,NULL,thread3,NULL);

pthread_join(p1,NULL);

pthread_join(p2,NULL);

pthread_join(p3,NULL);

pthread_mutex_destroy(&mutex);

pthread_cond_destroy(&cond1);

pthread_cond_destroy(&cond2);

return 0;

}

C++实现的第一种方式

#include #include #include #include #include using namespace std;

mutex mut;

condition_variable cond1, cond2;

int g_nums = 1;

void thread1() {

while (1) {

unique_locklocker(mut);

cout < locker(mut);

cout << "Thread2:" << g_nums << endl;

g_nums++;

cond1.notify_one();

cond2.wait(locker);

locker.unlock();

}

}

int main() {

thread t1(thread1);

thread t2(thread2);

t1.join();

t2.join();

system("pause");

return 0;

}

C++实现的第二种方式同理也很容易写出

c语言如何交替打印大小写字母,C/C++语言实现两个线程交替打印奇偶数相关推荐

  1. java让两个线程交替_java两个线程实现: 两个线程交替打印字母和数

    两个线程交替打印字母和数字: 1A2B3C4D5E6F7G public class LockConditionTest { public static void main(String[] args ...

  2. c语言首字母大小写字母转换,C语言大小写字母转换,C语言 大小写字母转换

    导航:网站首页 > C语言大小写字母转换,C语言 大小写字母转换 C语言大小写字母转换,C语言 大小写字母转换 匿名网友: #includevoid main(){char c1,c2: // ...

  3. 使用Java线程并发库实现两个线程交替打印的线程题

    背景:是这样的今天在地铁上浏览了以下网页,看到网上一朋友问了一个多线程的问题.晚上闲着没事就决定把它实现出来. 题目: 1.开启两个线程,一个线程打印A-Z,两一个线程打印1-52的数据. 2.实现交 ...

  4. Java常见的面试算法题:实现两个线程交替打印1到100的数

    Java常见的面试算法题:实现两个线程交替打印1到100的数 思路: 这是涉及到多个线程打印的问题,一定会用到锁的(synchronized),故这就是一个多线程打印的典型案例. 代码实现: pack ...

  5. 线程打印_面试题:用程序实现两个线程交替打印 0~100 的奇偶数

    作者:dadiyang来源:https://blog.csdn.net/dadiyang/article/details/88315124 面试场景 面试官:Java多线程了解吗?你给我写一下,起两个 ...

  6. 如何让两个线程交替打印整数1-100?你的答案呢?

    前端时间下班临走前看到同事做尝试的一个题目:如何让两个线程交替打印整数1-100? 好几年没有写代码玩了,想了想,花了十多分钟写了个答案: #include<stdio.h> #inclu ...

  7. 线程打印_经典面试题——两个线程交替打印奇数和偶数

    前提 今天下班时候和同事聊天偶然听到面试题"两个线程交替打印奇数和偶数"的实现,这里做一个复盘. 复盘 场景一:线程A打印奇数,线程B打印偶数,线程A和线程B交替打印,使用对象监视 ...

  8. Java两个线程交替打印奇偶数(两种方法对比)

    简介 本文将承接文章<Java多线程wait()和notify()系列方法使用教程>,我们将通过"两个线程交替打印100内的奇偶数",来展示下wait()方法和noti ...

  9. java go多线程:两个线程交替打印 0~100 的奇偶数

    最近在实现raft算法,用到了很多go的高并发的知识,看到一道题写两个线程交替打印 1~100 的奇偶数,突然来了兴趣. 题目要求我们要启动两个线程,一个打印奇数,一个打印偶数.中途不能跳出协程. 代 ...

  10. python两个线程交替执行_python 实现两个线程交替执行

    我就废话不多说,直接看代码吧! import threading import time def a(): while True: lockb.acquire() print('a') locka.r ...

最新文章

  1. 组策略 从入门到精通(十)通过组策略进行软件分发和卸载
  2. Jsp内置对象及EL表达式的使用
  3. 把java程序作为windows服务运行
  4. hdu 5909 Tree Cutting——点分治(树形DP转为序列DP)
  5. POJ 1741 Tree(树分治)
  6. django 国际化 ugettext()
  7. 2018.01.01(数字三角形,最长上升子序列等)
  8. java 代码重用需要注意的事项_程序员笔记|编写高性能的Java代码需要注意的4个问题...
  9. OD使用教程13(迷途) - 调试篇13
  10. C语言代码输出星期几,C语言程序设计: 输入年月日 然后输出是星期几
  11. 字段缺失_数据科学| 手把手教你用 pandas 索引、汇总、处理缺失数据
  12. 语音性别识别_语音识别识别性别_语音文字识别 - 云+社区 - 腾讯云
  13. Python数学建模系列(一):规划问题之线性规划
  14. 争冠,在路上?还是渐行渐远?
  15. oeasy教您玩转vim - 90 - # 语法定义syntax
  16. 产权登记在未成年子女名下,离婚时应如何处理
  17. Effective Java
  18. jquery中addClass()和removeClass()方法
  19. C# web 讯飞语音在线合成 错误10111
  20. 人工智能python好学吗_人工智能“速成班”Python好学吗 小心别被忽悠了

热门文章

  1. linux服务器打印400错误,Nginx过一段时间出现400 Bad Request 错误解决方法
  2. 算法详解_【MOT】详解SORT与卡尔曼滤波算法
  3. linux mutex使用检测锁,Linux驱动:互斥锁mutex测试
  4. android图像与动画处理,在Android和iPhone上对照片进行动画处理的7种最佳应用 | MOS86...
  5. 批量归一化Batch Normalization 动手学深度学习v2
  6. 翻译:Vim从入门到精通 Mac OS
  7. 图片不能有透明通道AppStore images can't contain alpha channels or transparencies windows iOS
  8. java synchronized 卖票_Java通过卖票理解多线程
  9. 2021-09-08FTRL 跟随正确的领导者
  10. 2021-08-30缺失的第一个正数