iis的默认网站没有自动启动wordpress 搜索框 404
2026/1/17 9:38:18 网站建设 项目流程
iis的默认网站没有自动启动,wordpress 搜索框 404,工作的拼音,手绘风格 网站各类资料学习下载合集 链接:https://pan.quark.cn/s/7c8c391011eb 在多线程编程中,生产者-消费者模型是解决并发问题的“圣杯”。之前我们可能接触过用条件变量来实现,但今天我们要换一种更直观、更适合计数场景的工具——信号量(Semaphore)。 本文将基于课堂笔记,带你…各类资料学习下载合集链接:https://pan.quark.cn/s/7c8c391011eb在多线程编程中,生产者-消费者模型是解决并发问题的“圣杯”。之前我们可能接触过用条件变量来实现,但今天我们要换一种更直观、更适合计数场景的工具——信号量(Semaphore)。本文将基于课堂笔记,带你深入理解信号量的工作原理,并通过代码演示如何用“星星”和“空格”的消长来平衡生产与消费。一、 核心概念:星星 vs 空格与条件变量不同,信号量本质上是一个计数器。在生产者-消费者模型中,我们可以将公共缓冲区(仓库)的状态抽象为两个数值:空格数 (blank_number):代表仓库里还剩下多少空位,可以用来存放新数据。星星数 (star_number):代表仓库里已经存了多少有效数据(产品),可以被消费。动态平衡规律笔记中提到一个非常重要的公式,这是理解该模型的钥匙:空格数 + 星星数 = 缓冲区总容量生产者:负责把“空格”变成“星星”。(blank--,star++)消费者:负责把“星星”变成“空格”。(star--,blank++)数组作为公共区虽然链表也能实现,但在信号量模型中,固定大小的环形数组是最常见的实现方式。我们假设仓库大小为5。初始状态:blank_number = 5,star_number = 0。二、 信号量的操作逻辑信号量的核心操作只有两个,我们俗称 PV 操作:sem_wait(sem)(P操作):尝试对信号量的值进行减 1。如果当前值为 0,线程会阻塞(睡眠),直到值大于 0。sem_post(sem)(V操作):对信号量的值进行加 1。如果有其他线程正在阻塞等待这个信号量,它会被唤醒。生产与消费的“舞步”根据笔记中的逻辑,双方的执行流程必须严格遵守以下顺序,否则会导致死锁或数据覆盖:生产者逻辑:sem_wait(blank_number):先检查还有没有空位?没有则阻塞等待。生产数据:将数据写入数组。sem_post(star_number):通知消费者,现在多了一个产品(星星)。消费者逻辑:sem_wait(star_number):先检查有没有产品?没有则阻塞等待。消费数据:从数组读取数据。sem_post(blank_number):通知生产者,现在多了一个空位。三、 代码实战下面是一个完整的 C 语言代码示例。为了模拟真实的并发环境,我们使用了一个大小为 5 的环形数组。1. 代码实现 (sem_product_consumer.c)#includestdio.h#includestdlib.h#includeunistd.h#includepthread.h#includesemaphore.h#

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询