当前位置: 首页 > news >正文

面试场景题

1 多线程打印奇数偶数

#include <mutex>
#include<thread>
#include<iostream>
#include<condition_variable>
using namespace std;int cnt = 1;
std::mutex mtx;
std::condition_variable cv;/*先上锁,如果条件为真,继续执行;如果条件为假,阻塞,解锁......
*/void printOdd() {while (cnt <= 100) {unique_lock<mutex> lock(mtx);//等待条件为真cv.wait(lock, []() { return cnt % 2 == 1; });//cv.wait(lock, [cnt]() { return cnt % 2 == 1; });	//报错cout << cnt << endl;++cnt;lock.unlock();cv.notify_all();}
}void printEven() {while (cnt <= 100) {unique_lock<mutex> lock(mtx);cv.wait(lock, []() {return cnt % 2 == 0; });cout << cnt << endl;++cnt;lock.unlock();cv.notify_all();}
}int main() {thread t1(printOdd);thread t2(printEven);t1.join();t2.join();return 0;
}

lambda:

lambda不能捕获静态存储的变量,如全局变量,局部静态变量
但是可以直接访问全局变量,局部静态变量

wait:

wait(lock);
阻塞当前线程,解锁lock
将当前线程添加到等待队列

wait(lock, 函数):
首先判断函数返回值,如果是false,就会执行wait,否则,直接返回

2 死锁示例

#include <mutex>
#include<thread>
#include<iostream>
#include<condition_variable>
using namespace std;std::mutex mtx1;
std::mutex mtx2;void p1() {std::unique_lock<std::mutex> lock1(mtx1);std::cout << "线程 1 获得 mutex1." << std::endl;std::this_thread::sleep_for(std::chrono::seconds(1));std::unique_lock<std::mutex> lock2(mtx2);std::cout << "线程 1 获得 mutex2." << std::endl;
}void p2() {std::unique_lock<std::mutex> lock2(mtx2);std::cout << "线程 2 获得 mutex2." << std::endl;std::this_thread::sleep_for(std::chrono::milliseconds(200));std::unique_lock<std::mutex> lock1(mtx1);std::cout << "线程 2 获得 mutex1." << std::endl;
}int main() {thread t1(p1);thread t2(p2);t1.join();t2.join();return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用 uni-app 开发微信小程序:深入教程与技巧
  • SpringCloud:Gateway
  • (Charles)如何抓取手机http的报文
  • Python Flask_APScheduler定时任务的正确(最佳)使用
  • Linux命名管道
  • 前端面试热点题目——typescript篇
  • 【高阶数据结构】二叉树的创建、存储方式(顺序与链式)、遍历方法(递归与非递归)(精美图解+完整代码)
  • 握手的方式展现人的性格及行为倾向
  • 请解释Java中的线程局部变量的作用和使用场景。什么是Java中的Lock接口?它与synchronized关键字有何区别?
  • yum源配置与静态配置地址
  • 华为OD机试真题-数组拼接-2023年OD统一考试(B卷)
  • SpringBoot 时间格式校验问题
  • MybatisPlus 快速入门
  • 基于JAVA+SpringBoot+Vue的工程教育认证的计算机课程管理平台
  • mac 电脑 git credential osxkeychain问题
  • __proto__ 和 prototype的关系
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Docker下部署自己的LNMP工作环境
  • Laravel 中的一个后期静态绑定
  • nginx 配置多 域名 + 多 https
  • 初识MongoDB分片
  • 猴子数据域名防封接口降低小说被封的风险
  • 开源SQL-on-Hadoop系统一览
  • 我建了一个叫Hello World的项目
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • # Panda3d 碰撞检测系统介绍
  • # Redis 入门到精通(一)数据类型(4)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (回溯) LeetCode 78. 子集
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (十三)MipMap
  • (算法)硬币问题
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • ****三次握手和四次挥手
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .chm格式文件如何阅读
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET CLR基本术语
  • .Net mvc总结
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 获取某一天 在当月是 第几周 函数
  • .net 使用ajax控件后如何调用前端脚本
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NetCore 如何动态路由
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • .php文件都打不开,打不开php文件怎么办
  • :=
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹