互斥锁实验

简介: 互斥锁实验

这个代码上节我们知道如果进行进程并发执行,那么很可能值不唯一

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
int ticketAmout = 2;
// 票的数量: 全局变量
void* ticketAgent(void*
arg){
int t = ticketAmout;
if (t > 0){
printf("One ticket sold\n");
t--;
}else{
printf("Ticket sold out\n");
}
ticketAmout = t;
pthread_exit(0);
}
int main(int
argc, char const*
agrv[]){
pthread_t ticketAgent_tid[2];
for(int i = 0; i < 2; i++){
pthread_create(ticketAgent_tid+i, NULL, ticketAgent, NULL);
}
for (int i = 0; i < 2; i++){
pthread_join(ticketAgent_tid[i], NULL);
}
sleep(1);
printf("The left ticket is %d\n", ticketAmout);
return 0;
}

可以看到因为并发的问题执行结果不唯一

于是我们引入互斥锁来解决上面的问题,主要分三步走:

  1. pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; //创建一个锁
  2. pthread_mutex_lock(&lock); //上锁
  3. pthread_mutex_unlock(&lock); //开锁
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
int ticketAmout = 2;
// 票的数量: 全局变量
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
void* ticketAgent(void* arg){
// 上锁
pthread_mutex_lock(&lock);
int t = ticketAmout;
if (t > 0){
printf("One ticket sold\n");
t--;
}else{
printf("Ticket sold out\n");
}
ticketAmout = t;
// 解锁
pthread_mutex_unlock(&lock);
pthread_exit(0);
}
int main(int argc, char const* agrv[]){
pthread_t ticketAgent_tid[2];
for(int i = 0; i < 2; i++){
pthread_create(ticketAgent_tid+i, NULL, ticketAgent, NULL);
}
for (int i = 0; i < 2; i++){
pthread_join(ticketAgent_tid[i], NULL);
}
sleep(1);
printf("The left ticket is %d\n", ticketAmout);
return 0;
}

可以看到没有互斥的问题了

死锁的概念

如果一个进程打开了一个锁,但是不去释放这个锁,那么会发生什么呢

我们把释放锁的代码给注释掉

一直再loop根本运行不下去,这就是死锁。

相关文章
|
7月前
|
运维 安全 算法
量子通信:真·不可破解的传输通道,还是被神话了?
量子通信:真·不可破解的传输通道,还是被神话了?
477 6
|
8月前
|
CDN
阿里云CDN计费价格如何收费的?一文看懂
阿里云CDN计费包含基础费与增值费。基础费默认按流量计费,支持阶梯定价及资源包抵扣;也可选按带宽峰值或月结95带宽计费。增值费如HTTPS、QUIC、WAF、实时日志等按使用收费,不使用不计费。详情可参考官方文档。
673 0
|
5月前
|
人工智能
在北京!阿里云OpenClaw首场虾友会来了!3月13,虾友集结!
今晚没有PPT,只有你和你的龙虾故事 免费安装、场景分享、产品共创、AI夜聊 还能现场观摩大咖如何“养虾”、阿里云产品专家面对面答疑解问、现场拍照打卡更有多款好礼等你拿!
|
6月前
|
SQL 人工智能 分布式计算
MaxCompute SQL AI 实践:电商用户评论情感洞察与关键词提取
本实践基于阿里云MaxCompute SQL AI功能,仅用SQL即可完成电商评论的情感分类(正/负/中性)与关键词提取,无需Python开发。内置模型开箱即用,业务人员零门槛上手,10万条评论分析仅需数秒,显著提升非结构化文本洞察效率。(239字)
610 4
|
7月前
|
弹性计算 人工智能 固态存储
2026阿里云服务器租用费用:包年包月和按小时收费标准与活动价格参考
2026年阿里云服务器租用费用涵盖多种实例规格及计费模式。轻量应用服务器2核2G低至38元/年(需抢购),ECS经济型e实例2核2G 3M带宽99元/年(新老同享续费不涨价),企业专享u1实例2核4G 5M带宽199元/年。GPU服务器如NVIDIA A10、V100等包年包月享4-5折优惠。价格由CPU内存、公网带宽及系统盘三部分组成,支持包年、包月、按小时计费,不同规格和时长折扣各异,实时价格以官网为准。
1282 11
|
7月前
|
人工智能 算法 架构师
AI Agent 职业路线全解析:从入门到专家的进阶指南
大模型正进化为能自主感知、规划、执行的AI Agent。AI Agent工程师需掌握思维设计、记忆管理、工具调用等核心能力,职业路径分原型落地、企业级方案、领域专家三阶段,是人机交互升级与垂直领域溢价的长青赛道。(239字)
496 1
|
8月前
|
监控 Android开发 虚拟化
阿里云无影云手机快速入门及使用流程(图文教程)
阿里云无影云手机是基于云端的虚拟安卓设备,依托ARM虚拟化技术,支持移动办公、游戏、企业营销等场景。用户可通过电脑或平板远程操控,实现不发热、不断电、不占本地资源的流畅体验。支持批量管理、多设备控制及高安全性策略,如网络监控与实时审计。
1604 6
|
9月前
|
人工智能 安全 调度
当“超节点”成为算力新秩序,openEuler重构数智基础设施
随着AI迈向规模化应用,大模型算力需求激增,传统架构难以为继。超节点应运而生,打破“算力孤岛”,实现资源统一调度。openEuler携手产业伙伴,打造全球首个面向超节点的操作系统,推动国产系统从“替代”走向“引领”。2025年,操作系统大会释放强信号:AI与算力深度融合,openEuler 24.03 LTS SP3将于年底上线,2026年或成商业化元年。通过全局资源抽象、异构融合、低时延通信等能力,操作系统正成为智能时代的“神经中枢”。数千企业、数万开发者共建生态,openEuler装机量将破1600万套,加速AI普惠落地,重塑全球算力新格局。
509 11
|
8月前
|
人工智能 缓存 自然语言处理
大模型推理与应用术语解释
本系列介绍了大语言模型核心技术:推理实现高效生成,生成式AI创造多样化内容,检索增强生成提升准确性,提示工程优化输入引导,上下文学习实现零样本迁移,代理构建自主智能体,多模态学习融合多种数据形式,语义搜索理解深层意图。这些技术共同推动AI向更智能、更实用演进,广泛应用于内容生成、知识服务与自动化系统,成为现代人工智能发展的核心驱动力。(238字)
|
8月前
|
消息中间件 Java 数据安全/隐私保护
RabbitMQ集群部署
本文介绍RabbitMQ集群部署与高可用方案,涵盖普通集群搭建、Erlang Cookie配置、节点发现机制及安全设置。通过静态配置实现三节点集群,并详解镜像模式(exactly、all、nodes)提升高可用性,避免单点故障。同时引入3.8版本后的仲裁队列,简化配置,实现数据冗余与自动主从切换,保障消息服务的稳定性与可靠性。