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

林管局网站建设方案企点qq

林管局网站建设方案,企点qq,网站改版,wordpress系统加载慢实验1&#xff1a;解决订票终端的临界区管理 订票终端是解决冲突问题&#xff0c;所以信号量的值是1 #include <stdio.h> #include <pthread.h> #include <unistd.h> #include <semaphore.h> int ticketAmout 2; // 票的数量: 全局变量 sem_t mutex…

实验1:解决订票终端的临界区管理
订票终端是解决冲突问题,所以信号量的值是1
在这里插入图片描述

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <semaphore.h>
int ticketAmout = 2;
// 票的数量: 全局变量
sem_t mutex;
// 定义信号量mutex
void* ticketAgent(void*arg){sem_wait(&mutex);
// 执行P操作
int t = ticketAmout;
if (t > 0){
printf("One ticket sold\n");
t--;
}else{
printf("Ticket sold out\n");
}
ticketAmout = t;
sem_post(&mutex);
// 执行V操作
pthread_exit(0);
}
int main(intargc, char const*agrv[]){
pthread_t ticketAgent_tid[2];
sem_init(&mutex, 0, 1);
// 初始化信号量
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);
sem_destroy(&mutex);
// 销毁信号量
return 0;
}

在这里插入图片描述
不进行V操作,造成死锁
在这里插入图片描述

第二个进程无限busy waiting。

在这里插入图片描述

实验2:一般信号量观察
我们现在有5个线程,但是只有两份资源可用;我们通过信号量去模拟这一种情况,将信号量的值初始化为2

我们先来看一种情况,当没有信号量进行控制的时候

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <semaphore.h>
void* cars(void* argc){
printf("(%lu) I INTEND to pass the fork\n",pthread_self());
sleep(1);
printf("(%lu) I am AT the fork\n",pthread_self());
sleep(1);
printf("(%lu) I have PASSED the fork\n",pthread_self());
sleep(1);
pthread_exit(0);
}
int main(int argc, char const* agrv[]){
pthread_t tid[5];
for (int i = 0; i < 5; i++){
pthread_create(tid+i, NULL, cars, NULL);
}
for (int i = 0; i < 5; i++){
pthread_join(tid[i], NULL);
}
return 0;
}

在这里插入图片描述可以看到每五个进程都同时占用了临界区的通道,也就是临界区同时运行了五个进程,这个是有问题的

我们梳理一下逻辑,input是进入程序,at fork 和 passed fork是分支产生(冲突或者同步),所以at 和 passed这段区域是临界区,代码如下:

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <semaphore.h>
sem_t road;
void* cars(void* argc){    
printf("(%u) I INTEND to pass the fork\n",pthread_self());    
sleep(1);    
sem_wait(&road); // 执行P操作   
printf("(%u) I am AT the fork\n",pthread_self());    
sleep(1);    
printf("(%u) I have PASSED the fork\n",pthread_self());    
sleep(1);    
sem_post(&road); // 执行V操作    
pthread_exit(0);
}
int main(int argc, char const* agrv[]){  
pthread_t tid[5];    
sem_init(&road, 0, 2);    
for (int i = 0; i < 5; i++){        
pthread_create(tid+i, NULL, cars, NULL);    
}    
for (int i = 0; i < 5; i++){       
pthread_join(tid[i], NULL);   
}    
sem_destroy(&road);    
return 0;}

每个fork执行流一次可以跑两个分支,两分支同步。
同一时间段内只有两个能进入到fork里面,执行完成只有,另外两个才能进入。
在这里插入图片描述

http://www.shuangfujiaoyu.com/news/24623.html

相关文章:

  • 中英文网站怎么实现太原百度搜索排名优化
  • 一级做a爱免费网站怎么投放网络广告
  • 河北农业建设信息网站软文300字介绍商品
  • 优秀网站例子什么建站程序最利于seo
  • 百度做玻璃钢的网站良品铺子网络营销策划书
  • 网站备案用户名忘了怎么办域名访问网站入口
  • 推广你公司网站windows优化大师
  • 网站必须做API接口吗国外免费建站网站搭建
  • 南宁市做网站的公司百度推广竞价技巧
  • 苹果cms网站广告怎么做wp博客seo插件
  • 政府网站建设指导意见西安seo关键词推广
  • 做kegg网站直播引流推广方法
  • 网站建设空间申请长春网站关键词推广
  • 那里做网站比较好排名优化价格
  • 四川监狱网站建设深圳搜索引擎优化收费
  • 公司网站怎么更新需要怎么做百度一下官网手机版
  • 企业建设营销网站的基本步骤2024年重大政治时事汇总
  • 半路出家去学计算机网站开发怎样创建一个自己的网站
  • 湖北可以做网站方案的公司推广引流软件
  • 全国高校校园网站建设与发展高级研修班苏州百度推广分公司电话
  • 多用户商城网站建设结构优化设计
  • 如何做网站嵌入腾讯地图广告联盟平台入口
  • 做购物网站怎么写开题报告拉新人拿奖励的app
  • wordpress 本地 域名兰州网络推广关键词优化
  • 只有域名怎么做网站html网页制作代码大全
  • 怎么做网站赚钱google官网入口手机版
  • 软件开发的六大步骤搜索关键词排名优化技术
  • 建设部中国建设工程信息网最新seo课程
  • 网站维护员工作内容百度认证平台
  • 单招网是哪个网站制作公司做的信息流优化师职业规划