C 语言的打瞌睡的理发师问题解决方案2024 年 8 月 28 日 | 3 分钟阅读 睡着的理发师困境最早由Dijkstra在1965年提出。这个问题基于一个虚构的情境:一家理发店里只有一名理发师。理发店的等候区和工作区分开。顾客可以在等候区等待,有n个座位;然而,工作区只有一个理发椅。 进程间通信虽然一个协作进程可能会受到正在运行的其他进程的影响,但一个独立进程不受其他进程执行的影响。尽管可以假设独立运行的进程会非常有效地工作,但实际上有许多情况下可以使用协作性质来提高计算速度、便利性和灵活性。进程可以通过一种称为进程间通信(IPC)的技术相互交互并协调其操作。这些进程之间的相互通信可以被视为一种协作方式。 问题 这个问题基于一个虚构的理发店,店里只有一个理发师,这是一个问题。理发店里有一名理发师,一个理发椅,以及n个座位供顾客等待理发椅,如果有的话。
解决方案 这个问题的解决方案使用三个信号量。第一个信号量用于顾客(不包括理发椅上的顾客,因为他不在等待),计算等候区中顾客的数量。第二个互斥量用于为进程操作提供必要的互斥,而理发师信号量(0或1)用于确定理发师是空闲还是工作。客户记录当前在等候区等待的客户数量,当该数量等于区域中的椅子数量时,下一个客户离开理发店。 理发师在早上到达时执行理发师程序,由于信号量客户最初为0,他会被阻塞。然后理发师回去睡觉,直到第一个客户到来。 代码 分析 当理发师开始工作时,执行理发师程序,他检查是否有任何客户准备好。如果有客户,就选择该客户理发并阻塞客户的信号量。如果没有人要求理发,理发师就会去睡觉。 如果椅子可用,客户释放互斥量,理发师醒来,等待计数器增加。然后理发师进入关键部分,获取互斥量,并开始理发。 理发完成后,客户离开。现在理发师查看等候区是否还有其他客户等待理发。如果没有,理发师就会去睡觉。 下一个主题如何在C语言中添加矩阵 |
C库函数strcspn()用于确定两个字符串中第一个字符之前字符的长度。语法:strcspn(const char *str1, const char *str2)此函数中使用的参数:str1:必须搜索的字符串,或目标字符串。str2:来自参数字符串的字符...
阅读 3 分钟
本节将讨论 C 语言中的数字金字塔模式、星形和字母。所有金字塔模式都呈多边形结构。面试官通常会问这些模式来考察程序员的逻辑和思维能力。一旦我们理解了逻辑……
11 分钟阅读
数组是 C 语言中最简单的数据结构,它在连续的内存位置存储同构数据。如果我们想创建一个数组,我们声明数据类型并向其中放入元素:#include<stdio.h> int main() { int i, arr[5] = {1, 2, 4, 2, 4}; for(i = 0; i...
阅读 3 分钟
在本文中,我们将讨论 C 语言中的函数间通信,包括其语法、示例和应用。什么是函数间通信?当程序中调用一个函数时,调用函数首先调用被调用函数,然后执行函数定义,然后返回到...
5 分钟阅读
空字符用于在 C 编码语言中终止字符字符串。换句话说,在 C 中,空字符代表字符串的结束、数组的结束或其他概念。'0' 或 '\0' 或 NULL 表示结束...
阅读 3 分钟
引言:在编程世界中,库是最重要和最有用的工具之一。它们是预先编写的代码片段,可用于执行特定任务,例如排序或搜索数据,而无需从头开始编写代码。C...
7 分钟阅读
简介:程序员以模式的形式编写了大量的练习程序。其中之一是钻石模式程序。在这里,我们将使用C语言创建一个空心钻石设计。C语言星形图案,带空心钻石让我们用C语言创建一个空心钻石星形图案程序:#include<stdio.h> int...
5 分钟阅读
C中的数据结构和算法|集-2 栈和队列本教程将介绍C中的另外两种线性数据结构——栈和队列。在本教程的第一部分,我们介绍了数组、动态数组和链表的基础知识。栈和队列都是用户定义的,这意味着...
阅读 16 分钟
在编程世界中,在集合中查找元素是一项常见的任务。线性搜索是最基本和最简单的搜索方法之一。本博文将介绍线性搜索的细节及其在...中的实现。
阅读 3 分钟
qsort() 是 C 库中一个预定义的标准函数。我们可以使用此函数按升序或降序对数组进行排序。它在内部使用快速排序算法,因此得名 qsort。它可以对任何数据类型的数组进行排序,包括字符串...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India