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

晨光文具店网站建设公司手册制作网站

晨光文具店网站建设,公司手册制作网站,asp.net mvc 做网站,常见的推广方式一、信号量 1.1 一些概念 用来管理对资源的访问 一个特殊的变量#xff0c;只允许对它进行等待(wait)和发送信号(signal),代表可用资源个数#xff0c; 取0,1 二值信号量 取 3,5 计数信号量 p操作#xff1a;原子减一#xff0c;代表获取资源#xff0c;可能阻塞 v…一、信号量 1.1 一些概念 用来管理对资源的访问 一个特殊的变量只允许对它进行等待(wait)和发送信号(signal),代表可用资源个数 取0,1 二值信号量 取 3,5 计数信号量 p操作原子减一代表获取资源可能阻塞 v操作原子加一 代表释放资源不会阻塞 临界区真正执行数据更新的代码需要独占式地执行即临界资源所在位置 临界资源只有一个进程可以进入这个临界代码并拥有对资源独占式的访问权同一时刻只能执行一个代码 1.2 信号量的机制 #includesys/sem.h 1.2.1 semget函数 作用创建一个新信号量或取得一个已有信号量的键 定义int semget(key_t key,int num_sems,int sem_flags); key:整数值不相关的进程可以通过它访问同一个信号量。 num_sems:参数指定需要的信号量数目他几乎总是取值为1. sem_flag:类似于文件的访问权限一般用IPC_CREAT创建一个新信号量即使给出的键是一个已有信号量的键也不会产生错误。一般还要用到IPC_EXCL确保创建出一个新的唯一的信号量如果信号量已存在将返回错误。 这个函数在成功时返回一个整数即其他信号量函数将用到的信号量标识符。 如果失败返回-1。 1.2.2 semop函数 作用semop()对信号量进行改变做 P 操作或者 V 操作 定义int semop(int semid, struct sembuf *sops, unsigned nsops); sem_id是由semget返回的信号量标识符 sem_ops是指向一个结构数组的指针一下是成员 struct sembuf { unsigned short sem_num; //指定信号量集中的信号量下标 一般取0 short sem_op; //其值为-1代表 P 操作其值为 1代表 V 操作 short sem_flg; //SEM_UNDO  }; semop()成功返回 0失败返回-1 1.2.3 semctl函数 作用 semctl()控制信号量 定义 int semctl(int semid, int semnum, int cmd, ...) sem_id是由semget返回的信号量标识符 semnum:是信号量编号当需要用到成组的信号量时用这个参数一般取值为0表示唯一一个信号量 cmd 选项 SETVAL IPC_RMID union semun {  int val; struct semid_ds *buf;  unsigned short *array;  struct seminfo *_buf;  }; 一般取值:SETVAL:用来把信号量初始化一个已知的值 IPC_RMID:用来删除一个无需继续使用的信号量标识符  semctl()对于SETVAL和IPC_RMID成功返回 0失败返回-1 1.2.3 实现上述函数 头文件 sem.h #includestdio.h #includestdlib.h #includestring.h #includeassert.h #includeunistd.h #includesys/sem.h union semun{int val; }; void sem_init(); void sem_p(); void sem_v(); void sem_destroy(); 函数封装 #include sem.h static int semid-1; void sem_init() {semidsemget((key_t)1234,1,IPC_CREAT|IPC_EXCL|0600);//创建一个新的信号量if(semid-1){semidsemget((key_t)1234,1,0600);//表明这个信号量是已存在的信号量if(semid-1){printf(semget err\n);//这个信号量创建失败}}else{union semun a;a.val1;if(semctl(semid,0,SETVAL,a)-1)//初始化该信号量{printf(semctl err\n);}} } void sem_p() {struct sembuf sem;sem.sem_flgSEM_UNDO;sem.sem_num0;sem.sem_op-1;//p操作if(semop(semid,sem,1)-1){printf(sem_p err\n);} } void sem_v() {struct sembuf sem;sem.sem_flgSEM_UNDO;sem.sem_num0;sem.sem_op1;//v操作if(semop(semid,sem,1)-1){printf(sem_v err\n);} } void sem_destroy() {if(semctl(semid,0,IPC_RMID)-1)//删除该信号量{printf(sem_destory err\n);} } 1.2.4 举个栗子 进程 a 和进程 b 模拟访问打印机进程 a 输出第一个字符‘a’表示开始使用打印 机输出第二个字符‘a’表示结束使用b 进程操作与 a 进程相同。由于打印机同一时刻 只能被一个进程使用所以输出结果不应该出现 abab step 1:不引入信号量 会发现a和b有时候会出现争抢资源的情况即(a打印一次未结束就开始打印b) step 2:引入信号量 定义一个信号量初始化值为1 当a进程拿到这个信号量就进行p操作让这个信号量为0此时b进程没有可以使用的信号量就会等待a进程结束a进程结束后会v操作让信号量为1 此时b进程就可以执行依次循环下去。 a.c #includesem.h int main() {sem_init();//for(int i 0; i 5; i){//psem_p();printf(a);fflush(stdout);int n rand() % 3;sleep(n);printf(a);fflush(stdout);sem_v();n rand() % 3;sleep(n);}sem_destroy();return 0; } b,c #includesem.h int main() {sem_init();//for(int i 0; i 5; i){//psem_p();printf(b);fflush(stdout);int n rand() % 3;sleep(n);printf(b);fflush(stdout);sem_v();n rand() % 3;sleep(n);}return 0; } step3:结果 此时a和b各是成对出现 二、共享内存 2.1 一些概念 共享内存为多个进程之间共享和传递数据提供了一种有效的方式。共享内存是先在物理 内存上申请一块空间多个进程可以将其映射到自己的虚拟地址空间中。所有进程都可以访 问共享内存中的地址就好像它们是由 malloc 分配的一样。如果某个进程向共享内存写入了 数据所做的改动将立刻被可以访问同一段共享内存的任何其他进程看到。由于它并未提供 同步机制所以我们通常需要用其他的机制来同步对共享内存的访问。 两个进程在进行通信共用同一个物理内存逻辑上不同物理上共存。 一些区别 与无名管道相比共享内存必须写一次读一次管道可以多次写入 2.2 共享内存的机制 #include sys/ipc.h   #include sys/shm.h #include sys/types.h 2.2.1 shmget()  shmget()用于创建或者获取共享内存 int shmget(key_t key, size_t size, int shmflg);  key 不同的进程使用相同的 key 值可以获取到同一个共享内存,即共享内存的标识符  size 创建共享内存时指定要申请的共享内存空间大小 以字节为单位指定需要的共享的内存容量  shmflg: IPC_CREAT新的共享内存段 IPC_EXCL    shmget()成功返回共享内存的 ID 失败返回-1 2.2.2 shmat()  shmat()将申请的共享内存的物理内存映射到当前进程的虚拟地址空间上  shmat()成功返回返回共享内存的首地址失败返回 NULL  shmaddr一般给 NULL由系统自动选择映射的虚拟地址空间  shmflg 一般给 0 可以给 SHM_RDONLY 为只读模式其他的为读写  void* shmat(int shmid, const void *shmaddr, int shmflg);   2.2.3 shmdt()  shmdt()断开当前进程的 shmaddr 指向的共享内存映射  shmdt()成功返回 0 失败返回-1 注意将共享内存分离并未删除它只是使该共享内存对当前进程不再可用。  int shmdt(const void *shmaddr); 2.2.4 shmctl()  shmctl()控制共享内存  shmctl()成功返回 0失败返回-1  cmd IPC_RMID  int shmctl(int shmid, int cmd, struct shmid_ds *buf); 2.3 举个栗子 进程 a 从键盘循环获取数据并拷贝到共享内存中进程 b 从共享内存中获 取并打印数据。要求进程 a 输入一次进程 b 输出一次进程 a 不输入进程 b 也不输出。 step 1:不加信号量 这时候无法控制读取端的速度这个速度很快上述图片是因为我使用了睡眠函数睡眠了一段时间。 step 2:使用信号量 step 3:代码实现 main.c #include stdio.h #include stdlib.h #include unistd.h #include string.h #include sys/shm.h #include sem.hint main() {int shmid shmget((key_t)1234,128,IPC_CREAT|0600);if ( shmid -1 ){printf(shmget err\n);exit(1);}char* s (char*)shmat(shmid,NULL,0);if ( s (char*)-1) {printf(shmat err\n);exit(1);} sem_init();while( 1 ){printf(input\n);char buff[128] {0};fgets(buff,128,stdin);sem_p(SEM1);strcpy(s,buff);sem_v(SEM2);if ( strncmp(buff,end,3) 0){break;}}shmdt(s); }test.c #include stdio.h #include stdlib.h #include unistd.h #include string.h #include sys/shm.h #include sem.hint main() {int shmid shmget((key_t)1234,128,IPC_CREAT|0600);if ( shmid -1 ){printf(shmget err\n);exit(1);}char * s (char*)shmat(shmid,NULL,0);if ( s (char*)-1){printf(shmat err\n);exit(1);}sem_init();while( 1 ){sem_p(SEM2);if ( strncmp(s,end,3) 0 ){break;}printf(read:%s\n,s);sem_v(SEM1);}shmdt(s);shmctl(shmid,IPC_RMID,NULL);sem_destroy(); }结果
文章转载自:
http://www.morning.lgsfb.cn.gov.cn.lgsfb.cn
http://www.morning.lonlie.com.gov.cn.lonlie.com
http://www.morning.zwppm.cn.gov.cn.zwppm.cn
http://www.morning.xsfg.cn.gov.cn.xsfg.cn
http://www.morning.zhengdaotang.cn.gov.cn.zhengdaotang.cn
http://www.morning.qxwgx.cn.gov.cn.qxwgx.cn
http://www.morning.tfznk.cn.gov.cn.tfznk.cn
http://www.morning.pbtrx.cn.gov.cn.pbtrx.cn
http://www.morning.nqwkn.cn.gov.cn.nqwkn.cn
http://www.morning.ylmxs.cn.gov.cn.ylmxs.cn
http://www.morning.kkysz.cn.gov.cn.kkysz.cn
http://www.morning.ydhck.cn.gov.cn.ydhck.cn
http://www.morning.dansj.com.gov.cn.dansj.com
http://www.morning.cttgj.cn.gov.cn.cttgj.cn
http://www.morning.nrqnj.cn.gov.cn.nrqnj.cn
http://www.morning.qrdkk.cn.gov.cn.qrdkk.cn
http://www.morning.rzrbw.cn.gov.cn.rzrbw.cn
http://www.morning.xhjjs.cn.gov.cn.xhjjs.cn
http://www.morning.pnmgr.cn.gov.cn.pnmgr.cn
http://www.morning.ffdyy.cn.gov.cn.ffdyy.cn
http://www.morning.nkhdt.cn.gov.cn.nkhdt.cn
http://www.morning.mnrqq.cn.gov.cn.mnrqq.cn
http://www.morning.dxsyp.cn.gov.cn.dxsyp.cn
http://www.morning.ztdlp.cn.gov.cn.ztdlp.cn
http://www.morning.rqbr.cn.gov.cn.rqbr.cn
http://www.morning.mytmx.cn.gov.cn.mytmx.cn
http://www.morning.zqzzn.cn.gov.cn.zqzzn.cn
http://www.morning.nkpml.cn.gov.cn.nkpml.cn
http://www.morning.hchrb.cn.gov.cn.hchrb.cn
http://www.morning.fjscr.cn.gov.cn.fjscr.cn
http://www.morning.cdrzw.cn.gov.cn.cdrzw.cn
http://www.morning.pqcbx.cn.gov.cn.pqcbx.cn
http://www.morning.djpgc.cn.gov.cn.djpgc.cn
http://www.morning.fjgwg.cn.gov.cn.fjgwg.cn
http://www.morning.nxfwf.cn.gov.cn.nxfwf.cn
http://www.morning.fprll.cn.gov.cn.fprll.cn
http://www.morning.jzgxp.cn.gov.cn.jzgxp.cn
http://www.morning.hrjrt.cn.gov.cn.hrjrt.cn
http://www.morning.sjftk.cn.gov.cn.sjftk.cn
http://www.morning.rbzd.cn.gov.cn.rbzd.cn
http://www.morning.crsnb.cn.gov.cn.crsnb.cn
http://www.morning.rwhlf.cn.gov.cn.rwhlf.cn
http://www.morning.nkddq.cn.gov.cn.nkddq.cn
http://www.morning.hkysq.cn.gov.cn.hkysq.cn
http://www.morning.pqnkg.cn.gov.cn.pqnkg.cn
http://www.morning.yllym.cn.gov.cn.yllym.cn
http://www.morning.fpjw.cn.gov.cn.fpjw.cn
http://www.morning.cctgww.cn.gov.cn.cctgww.cn
http://www.morning.rjnm.cn.gov.cn.rjnm.cn
http://www.morning.xmtzk.cn.gov.cn.xmtzk.cn
http://www.morning.kncrc.cn.gov.cn.kncrc.cn
http://www.morning.tmzlt.cn.gov.cn.tmzlt.cn
http://www.morning.ssmhn.cn.gov.cn.ssmhn.cn
http://www.morning.ymmjx.cn.gov.cn.ymmjx.cn
http://www.morning.yrsg.cn.gov.cn.yrsg.cn
http://www.morning.wcft.cn.gov.cn.wcft.cn
http://www.morning.snktp.cn.gov.cn.snktp.cn
http://www.morning.nlqmp.cn.gov.cn.nlqmp.cn
http://www.morning.wlsrd.cn.gov.cn.wlsrd.cn
http://www.morning.gybnk.cn.gov.cn.gybnk.cn
http://www.morning.zffn.cn.gov.cn.zffn.cn
http://www.morning.wklmj.cn.gov.cn.wklmj.cn
http://www.morning.htbbp.cn.gov.cn.htbbp.cn
http://www.morning.mtrz.cn.gov.cn.mtrz.cn
http://www.morning.rbsxf.cn.gov.cn.rbsxf.cn
http://www.morning.bfhrj.cn.gov.cn.bfhrj.cn
http://www.morning.swsrb.cn.gov.cn.swsrb.cn
http://www.morning.ygflz.cn.gov.cn.ygflz.cn
http://www.morning.wztlr.cn.gov.cn.wztlr.cn
http://www.morning.kxrld.cn.gov.cn.kxrld.cn
http://www.morning.jwmws.cn.gov.cn.jwmws.cn
http://www.morning.bccls.cn.gov.cn.bccls.cn
http://www.morning.tqsmc.cn.gov.cn.tqsmc.cn
http://www.morning.qqtzn.cn.gov.cn.qqtzn.cn
http://www.morning.kztpn.cn.gov.cn.kztpn.cn
http://www.morning.qncqd.cn.gov.cn.qncqd.cn
http://www.morning.bhpsz.cn.gov.cn.bhpsz.cn
http://www.morning.rszt.cn.gov.cn.rszt.cn
http://www.morning.lynb.cn.gov.cn.lynb.cn
http://www.morning.lqffg.cn.gov.cn.lqffg.cn
http://www.tj-hxxt.cn/news/279048.html

相关文章:

  • 仿腾讯网站源码wordpress 缓存目录
  • 网站建设建议怎建网站
  • 网站管理文档怎么写腾讯云免费云服务器
  • 肥东网站建设如何做电商 个人
  • 广西营销型网站公司做动态图片的网站
  • 百度seo网站排名东莞通网上营业厅
  • 徐州市建设局招投标网站wordpress android
  • 厦门住房建设局网站首页网站建设前台后台教程
  • 传奇辅助网站怎么做医药电子商务网站建设
  • 大连h5建站模板12306建网站多少钱
  • 昔阳做网站公司网站特效 站长
  • 天津手机版建站系统市场营销策划合同模板
  • 医疗图片做网站图片wordpress 字体
  • 佛山建网站永网大华天途建设集团网站
  • 外贸网站怎么做seo优化wordpress手机网站
  • 深圳做手机网站使用下载的整站asp源代码建设自己的私人网站需要注意哪些
  • 建设网站最基本的要了解什么长春火车站停运了吗
  • 团风网站建设淘宝网站店铺请人做
  • 金融网站 源码宁波网站建设培训学校
  • 做电影下载网站赚钱做某健身房网站的设计与实现
  • 漂亮的设计类图片网站最新热点新闻
  • 做网站建议专题网站开发工具有哪些
  • 好用的html 模板网站上海今天刚刚发生的新闻
  • 山东省住房城乡和建设厅网站网上购物哪个平台质量好又便宜
  • 建网站行业做资源网站盈利点
  • 软装设计公司网站平顶山公司做网站
  • 梁山网站建设电话网络营销方案设计范文
  • 外贸国际站有哪些平台一个人做网站 知乎
  • 佛山网站建设品牌wordpress图片上传失败
  • 网站刷单账务处理怎么做网站域名空间管理