【算法】两个线程交替打印0~100的数

这篇具有很好参考价值的文章主要介绍了【算法】两个线程交替打印0~100的数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法一:条件判断

#include <iostream>
#include <thread>
using namespace std;

int main()
{
	int i = 0;

	thread t1([&i]()
		{
			while (i < 100)
			{
				if (i % 2)
				{
					cout <<"t1: " << this_thread::get_id() << " -> " << i << endl;
					++i;
				}
			}
		});

	thread t2([&i]()
		{
			while (i <= 100)
			{
				if (i % 2 == 0)
				{
					cout << "t2: " << this_thread::get_id() << " -> " << i << endl;
					++i;
				}
			}
		});

	t1.join();
	t2.join();

	return 0;
}

方法二:条件变量

#include <iostream>
#include <thread>
#include <mutex>
using namespace std;

int main()
{
	int i = 0;
	mutex mtx;
	condition_variable cv;

	thread t1([&]()
		{
			while (i < 100)
			{
				unique_lock<mutex> lock(mtx);
				while (i % 2 == 0)
				{
					cv.wait(lock);
				}

				cout << "t1: " << this_thread::get_id() << " -> " << i << endl;
				++i;

				cv.notify_one();
			}

		});

	thread t2([&]()
		{
			while (i < 100)
			{
				unique_lock<mutex> lock(mtx);
				while (i % 2)
				{
					cv.wait(lock);
				}

				cout << "t2: " << this_thread::get_id() << " -> " << i << endl;
				++i;

				cv.notify_one();
			}
		});

	t1.join();
	t2.join();

	return 0;
}

总结:条件变量相比于条件判断更加繁琐,但是使用条件变量对于CPU的占用更低,如果是执行更繁杂的多线程任务,使用条件变量效率更高。文章来源地址https://www.toymoban.com/news/detail-628600.html

到了这里,关于【算法】两个线程交替打印0~100的数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java多线程】交替打印奇偶数

    需求 使用一个线程对一个数进行循环自增,并且使用另外两个线程对当前的数进行打印,一个线程打印奇数,一个线程打印偶数,要求最终输出结果必须按顺序打印出来 代码 先定义全局变量 指定三个线程: 线程一:对一个整型数(i50)进行递增 线程二:打印奇数; 线程三

    2024年02月10日
    浏览(34)
  • JavaScript实现求1-100之间不能被3整除的数之和,求100以内偶数的和的两个程序代码

    以下为实现求1-100之间不能被3整除数之和求100以内偶数的和的两个程序代码和运行截图 目录 前言 一、实现输入两个数比较两个数的大小 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 二、求100以内偶数的和 2.1 运行流程及思想 2.2 代码段 2.3 JavaScript语句代码

    2024年02月03日
    浏览(28)
  • 【练习】条件变量:创建三个线程 id号为ABC,三个线程循环打印自己的ID号,运行顺序为 ABCABC

    题目: 创建三个线程 id号为ABC,三个线程循环打印自己的ID号,运行顺序为 ABCABC...... 要求使用条件变量 运行结果:死循环输出ABCn

    2024年02月14日
    浏览(27)
  • 【算法Hot100系列】寻找两个正序数组的中位数

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月03日
    浏览(25)
  • 用3个go协程交替打印n到m

    解题思路: 创建一个包含三个通道的通道队列 chanQueue ,用于协程之间的通信。 定义一个计数器变量 result ,用于跟踪当前打印的数字。 创建一个退出信号通道 exitChan ,用于通知主函数所有协程已完成任务。 初始化通道队列 chanQueue ,并将最后一个通道中的数据置为非零值

    2024年02月13日
    浏览(23)
  • C语言比较两个数的大小,输出较大的数

    第一种: #includestdio.h int Max(int a,int b)   //创建一个函数对a b进行大小比较,输出最大值 {     if (a b)         return b;     else         return a; } int main() {     int x, y,max;     scanf(\\\"%d%d\\\", x, y);     max=Max(x, y);     printf(\\\"较大值=%d\\\", max);     return 0; } 第二种: #includestd

    2024年02月05日
    浏览(30)
  • 循环交替执行多线程任务-Java

    2024年02月16日
    浏览(27)
  • C# 多线程交替按照指定顺序执行

    1.关于AutoResetEvent和ManualResetEvent的区别解释如下: AutoResetEvent和ManualResetEvent是.NET中的两个线程同步类。它们之间的主要区别在于其释放信号的方式以及对等待线程的影响。 AutoResetEvent的作用是在等待的线程被信号唤醒后,将信号自动重置为非终止状态。也就是说,当一个线程

    2024年02月11日
    浏览(25)
  • 操作系统实验3.3 版本1.2内核的进程调度过程分析 && 两个进程的严格交替输出

    1. mygdb 侧调试命令: 2. 第三关.txt : 1.概述:0号进程和1号进程间进程调度过程 (1)从 system_call 函数进入相应的系统调用函数 在两个进程运行 alarm 和 pause 函数时,到执行 alarm 和 pause 系统调用时,都会进入到system_call函数,在下图第一处划线位置根据系统调用号,调用相应的

    2024年02月11日
    浏览(154)
  • 【华为OD机试】计算最接近的数【2023 B卷|100分】

      【 华为OD机试】-真题 !!点这里!! 【 华为OD机试】真题考点分类 !!点这里  !! 题目描述 给定一个数组X和正整数K,请找出使表达式: X[i] - X[i + 1] -  ... - X[i + K - 1] 结果最接近于数组中位数的下标 i ,如果有多个 i 满足条件,请返回最大的 i. 其中,数组中位数: 长度为

    2024年02月12日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包