网站怎么换主机/网站宣传方式有哪些
1.定义互斥锁
#include<myhead.h>int num=520;//临界资源//1.创建一个互斥锁变量
pthread_mutex_t mutex;//定义任务1函数
void *task1(void *arg)
{printf("11111111111111\n");//3.获取锁资源pthread_mutex_lock(&mutex);num=1314;sleep(3);printf("task1:num=%d\n",num);//释放锁资源pthread_mutex_unlock(&mutex);
}//定义任务2函数
void *task2(void *arg)
{printf("22222222222222\n");//3.获取锁资源pthread_mutex_lock(&mutex);num++;sleep(1);//在休眠时,任务1执行到赋值语句printf("task2:num=%d\n",num);//释放锁资源pthread_mutex_unlock(&mutex);
}
int main(int argc, const char *argv[])
{//2.初始化互斥锁pthread_mutex_init(&mutex,NULL);//创建两个线程pthread_t tid1,tid2;if(pthread_create(&tid1,NULL,task1,NULL)!=0){printf("tid1 create error\n");return -1;}if(pthread_create(&tid2,NULL,task2,NULL)!=0){printf("tid2 create error\n");return -1;}printf("tid1:%#lx,tid2:%#lx\n",tid1,tid2);//回收线程资源pthread_join(tid1,NULL);pthread_join(tid2,NULL);//5.销毁锁资源pthread_mutex_destroy(&mutex);return 0;
}
2.定义无名信号量
#include<myhead.h>
//1.创建无名信号量
sem_t sem;//定义生产者线程
void *task1(void *arg)
{int num=5;while(num--){sleep(1);printf("我生产了一辆特斯拉\n");//4.释放资源sem_post(&sem);}pthread_exit(NULL);//退出线程
}//定义消费者线程
void *task2(void *arg)
{int num=5;while(num--){//3.申请资源sem_wait(&sem);printf("我消费了一辆特斯拉\n");}pthread_exit(NULL);//退出线程
}
int main(int argc, const char *argv[])
{//2.初始化无名信号量sem_init(&sem,0,0);//第一个0表示用于线程同步,第二个0表示初始资源为0//创建两个线程,分别是生产者和消费者pthread_t tid1,tid2;if(pthread_create(&tid1,NULL,task1,NULL)!=0){printf("tid1 create error\n");return -1;}if(pthread_create(&tid2,NULL,task2,NULL)!=0){printf("tid2 create error\n");return -1;}printf("tid1:%#lx,tid2:%#lx\n",tid1,tid2);//回收线程资源pthread_join(tid1,NULL);pthread_join(tid2,NULL);//释放无名信号量sem_destroy(&sem);return 0;
}
3.创建三个线程,线程1打印输出字符A,线程2打印输出字符B,线程3打印输出字符C,用无名信号量输出结果为ABCABCABCABCABC。
#include<myhead.h>
//创建无名信号量
sem_t sem1,sem2,sem3;//定义线程1
void *task1(void *arg)
{int num=5;while(num--){sem_wait(&sem1);sleep(1);printf("A");fflush(stdout);sem_post(&sem2);}pthread_exit(NULL);
}
//定义线程2
void *task2(void *arg)
{int num=5;while(num--){sem_wait(&sem2);sleep(1);printf("B");fflush(stdout);sem_post(&sem3);}pthread_exit(NULL);
}
//定义线程3
void *task3(void *arg)
{int num=5;while(num--){sem_wait(&sem3);sleep(1);printf("C");fflush(stdout);sem_post(&sem1);}pthread_exit(NULL);
}int main(int argc, const char *argv[])
{sem_init(&sem1,0,1);sem_init(&sem2,0,0);sem_init(&sem3,0,0);pthread_t tid1,tid2,tid3;if(pthread_create(&tid1,NULL,task1,NULL)!=0){printf("tid1 create error\n");return -1;}if(pthread_create(&tid2,NULL,task2,NULL)!=0){printf("tid2 create error\n");return -1;}if(pthread_create(&tid3,NULL,task3,NULL)!=0){printf("tid3 create error\n");return -1;}printf("tid1:%#lx,tid2:%#lx,tid3:%#lx\n",tid1,tid2,tid3);pthread_join(tid1,NULL);pthread_join(tid2,NULL);pthread_join(tid3,NULL);sem_destroy(&sem1);sem_destroy(&sem2);sem_destroy(&sem3);puts("");return 0;
}
4.线程同步之条件变量
#include<myhead.h>
//1.定义条件变量
pthread_cond_t cond;//11.定义互斥锁变量
pthread_mutex_t mutex;//定义生产者线程1
void *task1(void *arg)
{int num=5;while(num--){sleep(1);printf("%#lx:生产了一辆特斯拉\n",pthread_self());//3.唤醒一个消费者//pthread_cond_signal(&cond);}//3.唤醒所有的等待线程pthread_cond_broadcast(&cond);//退出线程pthread_exit(NULL);
}
//定义消费者线程2
void *task2(void *arg)
{//33.上锁pthread_mutex_lock(&mutex);//4.进入等待队列pthread_cond_wait(&cond,&mutex);printf("%#lx:消费了一辆特斯拉\n",pthread_self());//44.解锁pthread_mutex_unlock(&mutex);//退出线程pthread_exit(NULL);
}
//定义消费者线程3
void *task3(void *arg)
{//33.上锁pthread_mutex_lock(&mutex);//4.进入等待队列pthread_cond_wait(&cond,&mutex);printf("%#lx:消费了一辆特斯拉\n",pthread_self());//44.解锁pthread_mutex_unlock(&mutex);//退出线程pthread_exit(NULL);
}
//定义消费者线程4
void *task4(void *arg)
{//33.上锁pthread_mutex_lock(&mutex);//4.进入等待队列pthread_cond_wait(&cond,&mutex);printf("%#lx:消费了一辆特斯拉\n",pthread_self());//44.解锁pthread_mutex_unlock(&mutex);//退出线程pthread_exit(NULL);
}
//定义消费者线程5
void *task5(void *arg)
{//33.上锁pthread_mutex_lock(&mutex);//4.进入等待队列pthread_cond_wait(&cond,&mutex);printf("%#lx:消费了一辆特斯拉\n",pthread_self());//44.解锁pthread_mutex_unlock(&mutex);//退出线程pthread_exit(NULL);
}
//定义消费者线程6
void *task6(void *arg)
{//33.上锁pthread_mutex_lock(&mutex);//4.进入等待队列pthread_cond_wait(&cond,&mutex);printf("%#lx:消费了一辆特斯拉\n",pthread_self());//44.解锁pthread_mutex_unlock(&mutex);//退出线程pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{//2.初始化条件变量pthread_cond_init(&cond,NULL);//22.初始化互斥锁pthread_mutex_init(&mutex,NULL);//创建六个线程,一个生产者,五个消费者pthread_t tid1,tid2,tid3,tid4,tid5,tid6;if(pthread_create(&tid1,NULL,task1,NULL)!=0){printf("tid1 create error\n");return -1;}if(pthread_create(&tid2,NULL,task2,NULL)!=0){printf("tid2 create error\n");return -1;} if(pthread_create(&tid3,NULL,task3,NULL)!=0){printf("tid3 create error\n");return -1;}if(pthread_create(&tid4,NULL,task4,NULL)!=0){printf("tid4 create error\n");return -1;}if(pthread_create(&tid5,NULL,task5,NULL)!=0){printf("tid5 create error\n");return -1;}if(pthread_create(&tid6,NULL,task6,NULL)!=0){printf("tid6 create error\n");return -1;}printf("tid1:%#lx,tid2:%#lx,tid3:%#lx,tid4:%#lx,tid5:%#lx5,tid6:%#lx\n",tid1,tid2,tid3,tid4,tid5,tid6);//回收线程资源pthread_join(tid1,NULL);pthread_join(tid2,NULL);pthread_join(tid3,NULL);pthread_join(tid4,NULL);pthread_join(tid5,NULL);pthread_join(tid6,NULL);//5.销毁条件变量pthread_cond_destroy(&cond);//55.销毁互斥锁pthread_mutex_destroy(&mutex);return 0;
}
相关文章:

IO进程线程:通信
1.定义互斥锁 #include<myhead.h>int num520;//临界资源//1.创建一个互斥锁变量 pthread_mutex_t mutex;//定义任务1函数 void *task1(void *arg) {printf("11111111111111\n");//3.获取锁资源pthread_mutex_lock(&mutex);num1314;sleep(3);pr…...

神经网络系列---常用梯度下降算法
文章目录 常用梯度下降算法随机梯度下降(Stochastic Gradient Descent,SGD):随机梯度下降数学公式:代码演示 批量梯度下降(Batch Gradient Descent)批量梯度下降数学公式:代码演示 小…...

Flink 的历史版本特性介绍(一)
如果你还不了解 Flink 是什么,可以查看我之前的介绍文章:Flink 介绍 如果你想跟着我一起学习 flink,欢迎查看订阅专栏:Flink 专栏 这篇文章列举了 Flink 每次发布的版本中的重要特性,从中可以看出 Flink 是如何一步一步发展到今天的。 Flink 的前身是 Stratosphere 项目…...

【尚硅谷】MybatisPlus 学习笔记(下)
目录 六、插件 6.1、分页插件 6.1.1、添加配置类 6.1.2、测试 6.2、xml自定义分页 6.2.1、UserMapper中定义接口方法 6.2.2、UserMapper.xml中编写SQL 6.2.3、测试 6.3、乐观锁 6.3.1、场景 6.3.2、乐观锁与悲观锁 6.3.3、模拟修改冲突 数据库中增加商品表 添加数…...

408数据结构算法模板
下面这份408数据结构算法模板耗时3天整理,希望对大家有用 408算法题概述 得分要点 会写结构定义(没有就自己写上)写清楚解题的算法思想描述清楚算法实现最后写出时间和空间复杂度 关于改卷 1、改卷老师不会上机试 2、老师改的是扫描卷 3、…...

Mysql--索引分类
Mysql--索引分类 1. 索引分类2. 聚集索引&二级索引 1. 索引分类 在MySQL数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。 2. 聚集索引&二级索引 而在在InnoDB存储引擎中,根据索引的存储形式&am…...

AutoTimes:通过大语言模型的自回归时间序列预测器
论文标题: AutoTimes: Autoregressive Time Series Forecasters via Large Language Models 作者:Yong Liu, Guo Qin, Xiangdong Huang, Jianmin Wang, Mingsheng Long 链接:https://arxiv.org/abs/2402.02370 机构:清华大学 …...

记录 | go与C/C++交互
Go语言是类C的语言,与C语言有着千丝万缕的联系,在Go语言的代码中可以直接调用C语言代码,但不支持直接调用 C。 Go 调用 C/C 的方式: C:直接调用 C API;C:通过实现一层封装的 C 接口来调用 C 接…...

B3623枚举排列
题目描述 今有 n 名学生,要从中选出 k 人排成一列拍照。 请按字典序输出所有可能的排列方式。 输入格式 仅一行,两个正整数 n,k。 输出格式 若干行,每行 k 个正整数,表示一种可能的队伍顺序。 输入输出样例 输入 #1复制 …...

vuex怎么防止数据刷新丢失?
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式和库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。为了防止 Vuex 中的数据在刷新时丢失,你可以采取以下策略: 持久化插件:…...

OpenGL ES 渲染 NV21、NV12、I420、YV12、YUYV、UYVY、I444(建议收藏)
本文主要讲解常见的 YUV 格式图像渲染方式,如果对 YUV 格式不是很熟悉的同学可以翻看旧文一文掌握 YUV 图像的基本处理,YUV 格式的介绍这里不再展开。 渲染 NV21、NV12 格式图像 NV21、NV12 可以看成同一种结构,区别只是 uv 的交错排列顺序不同。 渲染 NV21/NV12 格式图像…...

云计算的两地三中心和灾备介绍
两地三中心是指在不同的地理位置建立两个数据中心和一个灾备中心,其中一个数据中心为主数据中心,另一个数据中心为备用数据中心,灾备中心则用于备份数据和在主数据中心或备用数据中心发生故障或灾难时提供应急支持。 异地灾备则是指在不同的地…...

Spring Bean
Spring的配置方式 1、xml配置文件 2、基于注解的方式 3、基于Java的方式 Spring Bean的生命周期 1、通过构造器或工厂方法创建bean实例 2、为bean的属性赋值 3、调用bean的初始化方法 4、使用bean 5、当容器关闭时,调用bean的销毁方法 Spring inner beans …...

Linux的时间操作
当涉及到时间操作时,Linux提供了一系列函数和结构体来处理时间的获取、转换和操作。 time_t 别名 time_t 是 C/C 中用来表示时间的类型,通常被定义为整数类型。它通常用来存储从纪元(通常是1970年1月1日)到某一特定时间点之间的…...

2024-02-21 作业
作业要求: 复习课上内容 //已完成结构体字节对齐,64位没做完的做完,32位重新都做一遍,课上指定2字节对齐的做一遍,自己验证 //已完成两种验证大小端对齐的代码写一遍复习指针内容 //已完成完善顺序表已写出的…...

平台组成-监控服务
监控服务和其他服务不同,不是一个单一的微服务,准确来说是一个体系。每个微服务都集成了Actuator,通过Actuator对外提供微服务的运行状况。关于Actuator大家可以阅读这篇文章。《Spring boot——Actuator 详解》 其上是Micrometer&…...

探索分布式强一致性奥秘:Paxos共识算法的精妙之旅
提到分布式算法,就不得不提 Paxos 算法,在过去几十年里,它基本上是分布式共识的代名词,因为当前一批常用的共识算法都是基于它改进的。比如,Fast Paxos 算法、Cheap Paxos、Raft 算法等。 由莱斯利兰伯特(L…...

使用 ES|QL 优化可观察性:简化 Kubernetes 和 OTel 的 SRE 操作和问题解决
作者:Bahubali Shetti 作为一名运营工程师(SRE、IT 运营、DevOps),管理技术和数据蔓延是一项持续的挑战。 简单地管理大量高维和高基数数据是令人难以承受的。 作为单一平台,Elastic 帮助 SRE 将无限的遥测数据&#…...

Docker 第十九章 : 阿里云个人镜像仓使用
Docker 第十九章 : 阿里云个人镜像仓使用 本章知识点: 如何创建镜像库,如何设置密码,如何登录与退出个人镜像仓,如何本地打镜像,如何将本地镜像推送到个人镜像库。 背景 在项目YapiDocker部署中,因读取mongo:latest 版本不一致,导致后续执行步骤的异常。遇到此场景…...

二、系统知识笔记-系统架构概述
一、系统架构定义 系统架构是指对一个系统的整体结构和组成部分进行描述和规划的过程。系统架构定义决定了系统的设计、开发和实施过程中的关键方向和决策。是系统的骨架和根基,支撑和链接各个部分,包括组件、连接件、约束规范以及指导这些内容设计与演…...

【高德地图】Android高德地图绘制标记点Marker
📖第4章 Android高德地图绘制标记点Marker ✅绘制默认 Marker✅绘制多个Marker✅绘制自定义 Marker✅Marker点击事件✅Marker动画效果✅Marker拖拽事件✅绘制默认 Infowindow🚩隐藏InfoWindow 弹框 ✅绘制自定义 InfoWindow🚩实现 InfoWindow…...

每天一个知识点 - 如何快速熟悉后端项目
入职一家新公司的时候,不可避免的就是接触到新公司的项目,有些项目一启动就是好几年,业务功能极其复杂,下面我总结几个方法让大家快速熟悉后端项目(图文结合) 用例图简析 用例是系统中的一个功能单元&…...

如何将cocos2d-x js打包部署到ios上 Mac M1系统
项目环境 cocos2d-x 3.13 xcode 12 mac m1 big sur 先找到你的项目 使用xcode软件打开上面这个文件 打开后应该是这个样子 执行编译运行就好了 可能会碰到的错误 在xcode11版本以上都会有这个错误,这是因为iOS11废弃了system。 将上面代码修改为 #if (CC_TARGE…...

pdffactory pro 8中文破解版
详细介绍 PdfFactory,PDF文档虚拟打印机,无须Acrobat即可创建Adobe PDF文件,创建PDF文件的方法比其他方法更方便和高效。支持将多个文档整合到一个PDF文件、增加字体和便签、PDF加密、去水印、压缩优化。 FinePrint,Windows虚拟…...

常用ADB命令整理已经ADB键盘输入
我们在测试Android app过程中 需要经常更换安装包的操作 熟练使用ADB命令可以提升测试效率 * 查看设备 adb devices ps这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 若有多台安卓设备,可以通过在adb后面加上 -s <设备id>…...

buuctf_N1BOOK_粗心的小李
题目: 看完题目,git下载文件?然后将.git文件传到线上环境?(which 会造成git泄露的安全威胁)<这个背景抱歉我不太了解哈,可能后续有补充> 这里主要记录做法过程: 工具…...

爬取链家二手房房价数据存入mongodb并进行分析
实验目的 1.使用python将爬虫数据存入mongodb; 2.使用python读取mongodb数据并进行可视化分析。 实验原理 MongoDB是文档数据库,采用BSON的结构来存储数据。在文档中可嵌套其他文档类型,使得MongoDB具有很强的数据描述能力。本节案例使用的…...

论文阅读:Ground-Fusion: A Low-cost Ground SLAM System Robust to Corner Cases
前言 最近看到一篇ICRA2024上的新文章,是关于多传感器融合SLAM的,好像使用了最近几年文章中较火的轮式里程计。感觉这篇文章成果不错,代码和数据集都是开源的,今天仔细读并且翻译一下,理解创新点、感悟研究方向、指导…...

一键获取电商平台商品信息,快速提高电商业务效率
阿里巴巴店铺所有商品API接口技术全解析 一、引言 在阿里巴巴这个全球领先的电商平台上,店铺所有商品API接口(item_search_shop)为开发者提供了一个便捷的途径,能够获取店铺的所有商品信息。通过这一接口,无论是数据…...

vue 中实现音视频播放进度条(满足常见开发需求)
由于开发需要,作者封装了一个音视频播放进度条的插件,支持 vue2 及 vue3 ,有需要的朋友可联系作者,下面是对该款插件的介绍。 插件默认样式👇(插件提供了多个配置选项,可根据自身需求进行个性化…...