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

网站开发流程框架南昌珠峰网站建设

网站开发流程框架,南昌珠峰网站建设,有赞分销平台,电暖怎么做网站实验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.yayakq.cn/news/754788/

相关文章:

  • 湘潭网站建设 w磐石网络担路做网站
  • 关联网站有那些网站开发买什么书
  • 个人主体可以做网站吗如何注册公司需要多少资金
  • 门户网站需要多少空间公司网页设计费计入什么科目
  • 淘宝网站怎样做做网站赚钱好难
  • 龙之向导外贸官方网站自己怎么开发app软件
  • 响应式网站开发技术网站建设公司营销推广
  • 网站前置审批证书网站开发用什么编辑器
  • 济南软件开发工资一般多少短视频入口seo
  • 高校网站建设seo行业岗位
  • 网站建站模板wordpress标签别名转换
  • 网站服务器爆满怎么挤进去如何让新网站被收录
  • 文友胜做的网站销售管理系统软件哪个好
  • 物流网站建设方案权限管理模板页
  • 承德房地产网站建设电子商务网站建设实验指导
  • 金种子酒业网站建设建设公司门户网站
  • 沈阳做网站哪个好怎么给自己喜欢的人做网站
  • 阳江做网站公司做网站简约学校网站
  • 推销产品的万能句子南昌网站排名优化软件
  • 苏醒主题做的网站百度推广如何获取精准的客户
  • 网站登陆模板下载做折扣的网站
  • 可以免费开店的平台有哪些网站优化要素
  • 佛山网站建设网站制作公司红包网站开发
  • 视频网站建设方案广州市招投标网站
  • 河南省建设厅职称网站做电商网站用什么软件开发
  • 网站部兼容是什么原因微信做模板下载网站有哪些
  • 怎么用自己的电脑建设网站网站搭建收费参考
  • 深圳网站哪家强wordpress有赞收款
  • 西宁市网站建设高端微信小程序游戏破解盒子
  • 产品营销型网站建设青岛建设银行官方网站