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

软件网站建设专业城市介绍网站模板

软件网站建设专业,城市介绍网站模板,广州天河区网站建设,怀来县建设局网站目录 1. Peterson 算法伪代码 2. 信号量生产者消费者问题分析 3. 注释 Peterson 主函数并分析输出结果 4. 用 fork 创建子进程的程序 1. Peterson 算法伪代码 题目: 写出 Peterson 算法的伪代码。 参考答案: // 定义变量 boolean flag[2]; //…

目录

1. Peterson 算法伪代码

2. 信号量生产者消费者问题分析

3. 注释 Peterson 主函数并分析输出结果

4. 用 fork 创建子进程的程序


1. Peterson 算法伪代码

题目:

写出 Peterson 算法的伪代码。

参考答案:

// 定义变量
boolean flag[2];     // 表示每个线程是否希望进入临界区
int turn;            // 表示轮到哪个线程进入临界区// 线程 i 的代码
do {flag[i] = true;  // 表示线程 i 希望进入临界区turn = j;        // 将权利让给线程 jwhile (flag[j] && turn == j) {// 等待线程 j 完成临界区}// 临界区// ...flag[i] = false; // 离开临界区// 剩余区// ...
} while (true);

说明:

Peterson 算法是用于两个线程的同步算法,保证了互斥和死锁避免。

  • flag[i] 表示线程 i 是否希望进入临界区。

  • turn 变量表示当前轮到哪个线程进入临界区,确保不会发生竞争条件。

2. 信号量生产者消费者问题分析

题目:

注释以下代码,并说明三个信号量的含义,以及 A 和 B 哪个是生产者进程,哪个是消费者进程。

semaphore full = 0, empty = n, mutex = 1;A: 
do {… produce an item in nextp …wait(empty);wait(mutex);add nextp to buffer;signal(mutex);signal(full);
} while (1);B: 
do {wait(full);wait(mutex);… remove an item from buffer to nextc …signal(mutex);signal(empty);… consume the item in nextc …
} while (1);

参考答案:

注释代码:

semaphore full = 0;    // 表示缓冲区中的产品数,初始值为 0。
semaphore empty = n;   // 表示缓冲区的空位数,初始值为 n(缓冲区大小)。
semaphore mutex = 1;   // 用于实现对缓冲区操作的互斥访问,初始值为 1。

进程 A 是生产者:

  • produce an item in nextp; 生产一个产品并将其存储在 nextp

  • wait(empty); 确保缓冲区有空位可以存放新产品。

  • wait(mutex); 确保对缓冲区的互斥访问。

  • add nextp to buffer; 将产品添加到缓冲区。

  • signal(mutex); 释放对缓冲区的互斥访问。

  • signal(full); 增加缓冲区中产品的计数。

进程 B 是消费者:

  • wait(full); 确保缓冲区中有可供消费的产品。

  • wait(mutex); 确保对缓冲区的互斥访问。

  • remove an item from buffer to nextc; 从缓冲区中取出产品到 nextc

  • signal(mutex); 释放对缓冲区的互斥访问。

  • signal(empty); 增加缓冲区的空位计数。

  • consume the item in nextc; 消费产品。

3. 注释 Peterson 主函数并分析输出结果

题目:

注释以下 Peterson 主函数的每行程序,并分析程序可能的输出结果。

boolean flag[2];
flag[0] = false;
flag[1] = false;
int turn;do {flag[i] = true;turn = j;while (flag[j] && turn == j) {}// 临界区flag[i] = false;// 剩余区
} while (1);

参考答案:

注释代码:

boolean flag[2];        // 定义两个标志位,用于表示线程是否希望进入临界区。
flag[0] = false;        // 初始化标志位,表示线程 0 初始时不希望进入临界区。
flag[1] = false;        // 初始化标志位,表示线程 1 初始时不希望进入临界区。
int turn;               // 定义变量,用于指示当前轮到哪个线程进入临界区。
flag[i] = true;         // 线程 i 表示希望进入临界区。
turn = j;               // 将优先权交给线程 j。
while (flag[j] && turn == j) {}  // 如果线程 j 也希望进入临界区且优先级是 j,则等待。
// 临界区:执行线程 i 的临界区代码。
flag[i] = false;        // 线程 i 退出临界区。
// 剩余区:线程 i 执行非临界区代码。

程序输出分析:

  • Peterson 算法保证了互斥性:只有一个线程能进入临界区,两个线程不会同时进入临界区。

  • 死锁避免:通过 turn 变量的使用,确保没有线程因互相等待而永远阻塞。

  • 饥饿避免:因为 turn 变量的轮换机制,确保了每个线程都会有机会进入临界区。

4. 用 fork 创建子进程的程序

题目:

写一个程序,完成以下功能:用 fork 创建子进程,若失败,输出 “failed”,程序退出;在子进程中输出 “child”;在父进程中等待子进程返回后,输出 “parent”。

参考答案:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>int main() {pid_t fpid;  // 定义进程号变量fpid = fork();  // 创建子进程if (fpid < 0) {  // fork 返回值小于 0 表示创建失败printf("failed\n");exit(-1);  // 退出程序} else if (fpid == 0) {  // fork 返回值等于 0 表示当前是子进程printf("child\n");} else {  // fork 返回值大于 0 表示当前是父进程wait(NULL);  // 等待子进程结束printf("parent\n");}return 0;
}

程序运行结果:

  • 如果 fork() 成功,输出:
    child
    parent
    
  • 如果 fork() 失败,输出:
    failed
    

说明:

  • fork() 用于创建子进程,子进程从 fork() 返回点开始执行。

  • 父进程和子进程的区别是 fork() 的返回值不同。

  • wait() 使父进程等待子进程结束后再继续执行。


文章转载自:

http://5ekFOqpw.rkwLg.cn
http://COrDaATV.rkwLg.cn
http://BwsVcJOd.rkwLg.cn
http://3NSLJEU5.rkwLg.cn
http://mcFTFPJ2.rkwLg.cn
http://DnT7nku6.rkwLg.cn
http://9XmrIJvn.rkwLg.cn
http://EEqhJotB.rkwLg.cn
http://6wz2bcv3.rkwLg.cn
http://HDIGytPU.rkwLg.cn
http://tp9Gpwol.rkwLg.cn
http://E4LByjrM.rkwLg.cn
http://Gwdty7RU.rkwLg.cn
http://9E5XSgSJ.rkwLg.cn
http://LRX9D1FH.rkwLg.cn
http://6I1Z0OFj.rkwLg.cn
http://YP0wWjDH.rkwLg.cn
http://oxNZ6tr6.rkwLg.cn
http://DB3gzWZX.rkwLg.cn
http://5dXk3Xpp.rkwLg.cn
http://DOY3G1cS.rkwLg.cn
http://IAxmqJmp.rkwLg.cn
http://se8PPwYE.rkwLg.cn
http://aCZDgZO4.rkwLg.cn
http://hkdyqNSW.rkwLg.cn
http://2GfubQNT.rkwLg.cn
http://jpfd9hLM.rkwLg.cn
http://Go9wAvFR.rkwLg.cn
http://gFCRDJ3U.rkwLg.cn
http://HmakgZex.rkwLg.cn
http://www.dtcms.com/wzjs/740898.html

相关文章:

  • 龙岗网站网页统计代码大全
  • 学校网站建设工作计划河南中州路桥建设有限公司网站
  • 个人网站开发的意义网站群集约化建设
  • 创建网站用什么语言怎么制作网站获取他人ip
  • 电子商务与网站建设策划书网站安全建设需求分析报告
  • 网站建设开发公司有哪些淘宝店铺首页设计
  • 有哪些网站是做视频的国外的app设计网站
  • 广西网站建设建议建设一个门户网站
  • 模版建网站更换wordpress字体
  • 网站发布 图片看不到推广平台软件有哪些
  • 网站开发协助方案长沙网站建设哪个好
  • 建模素材免费网站今天发生的重大新闻内容
  • 手表二级市场网站做网站如何用代码把字体变大
  • dw网站建设教程做评测好的视频网站
  • 做一个网站需要哪些资源做网站的女生多么
  • 小白如何做网站建设公众号萍乡建设网站
  • 高中网站建设计划表深圳专业网站建设平台网页
  • 企业网站维护服务网站分为哪几个部分
  • 创客贴网站建设建设一站式服务网站
  • 网站建设的解决方案网站建设网站维护的具体内容是什么
  • 如何自己创造一个网站平台深圳做营销网站的公司
  • 做网站有哪些软件濮阳网站建设网站
  • 如何建立自己的公司网站开发者模式在哪里打开
  • 盐城做网站优化桂林网站网站建设
  • 律师网站建设方案网站建设用什么软件比较好
  • 物业服务网站建设企业自助建站网
  • 网站建设的可用性163企业邮箱登录入口官网
  • 京东电子商务网站建设网站开发要学哪些知识
  • 景区网站建设原则网站建设模板后台
  • 广州网站建设q479185700棒企业推广软文