semaphore实现浏览器的读写原理
在编程范式中的斯坦福大学的老师说了一个例子:好比世界上就只有一台互联网的服务器,当我们浏览网页的时候,就好比服务器进行了写操作,而浏览器则进行了读操作。
我如果用简单的伪代码c++写出来是这个样子的:
int main(){
ITP(false);
ThreadNew("write",write,0);
ThreadNew("Reader",reader,0);
RunAllThread();
void writer(){
for(int i=0;i<40; i++){
char = PrepareRandom();
buffer[i/8] = c;
}
void reader(){
for(int i=0; i<40; i++){
char c = buffer[i%8];
Processchar(c);
}
}
}
}
用信号量的解决办法代码如下:
int main(){
char buffer[8];
Semaphore emptyBuffer = (9);
Semaphore fullBuffer = (0);
ITP(false);
ThreadNew("write",write,0);
ThreadNew("Reader",reader,0);
RunAllThread();
void writer(){
for(int i=0;i<40; i++){
char c= PrepareRandom();
semaphoreWait(emptyBuffer); //Wait on the specified semaphore
buffer[i/8] = c;
semaphoreSignal(fullbuffer);
}
void reader(){
for(int i=0; i<40; i++){
semaphoreWait(fullbuffer);
char c = buffer[i%8];
Processchar(c);
semaphoreSignal(emptyBuffer);//Increments the semaphore count
}
}
}
}
semaphore实现浏览器的读写原理的更多相关文章
- 浏览器内部工作原理--作者:Tali Garsiel
本篇内容为转载,主要用于个人学习使用,作者:Tali Garsiel 一.介绍 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在地址栏输入google.com到你看到 ...
- 浏览器解析JavaScript原理
1.浏览器解析JavaScript原理特点: 1.跨平台 2.弱类型 javascript 定义的时候不需要定义数据类型,数据类型是根据变量值来确定的. var a = 10; 数字类型 ...
- HBase数据模型和读写原理
Hbase的数据模型和读写原理: HBase是一个开源可伸缩的分布式数据库,他根据Google Bigtable数据模型构建在hadoop的hdfs存储系统之上. HBase是一个稀疏.多维度 ...
- 第八章 Redis数据库结构与读写原理
注:本文主要参考自<Redis设计与实现> 1.数据库结构 每一个redis服务器内部的数据结构都是一个redisDb[],该数组的大小可以在redis.conf中配置("dat ...
- Redis数据库结构与读写原理
此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.数据库结构 每一个redis服务器内部的数据结构都是一个redisDb[],该数组的大小可以在redi ...
- Web服务器与浏览器的实现原理
Web服务器与浏览器的实现原理 第一部分 为什么会出现web程序? 单机程序不能共享功能的特性导致了客户机服务器模式的诞生 有一台服务器有特定功能的程序 其他计算机通过客户端程序与服务器交流间接使用 ...
- javascript总结20: 前端必读,浏览器内部工作原理(转)
目录 一.介绍 二.渲染引擎 三.解析与DOM树构建 四.渲染树构建 五.布局 六.绘制 七.动态变化 八.渲染引擎的线程 九.CSS2可视模型 英文原文:How Browsers Work: Beh ...
- HBase存储及读写原理介绍
一.HBase介绍及其特点 HBase是一个开源的非关系型分布式数据库,它参考了谷歌的BigTable建模,实现的编程语言为Java.它是Apache软件基金会的Hadoop项目的一部分,运行于HDF ...
- html2canvas实现浏览器截图的原理(包含源码分析的通用方法)
DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师. 官方网站:devui.design Ng组件库:ng-devui(欢 ...
随机推荐
- Oracle笔记之对象权限与系统权限总结
对象权限与系统权限 创建表和创建session是系统权限: 系统管理员是有权限去訪问其它表的 以sys登录 sqlplus sys/on_change_install as sysdba; 创 ...
- X Window System介绍
1.概述 X Window System是1984年由麻省理工学院(MIT)和DEC公司共同开发研究的,是执行在UNIX系统上的视窗系统.严格地说,X Window System并非一个软件, ...
- Ceph之数据分布:CRUSH算法与一致性Hash
转自于:http://www.cnblogs.com/shanno/p/3958298.html?utm_source=tuicool 数据分布是分布式存储系统的一个重要部分,数据分布算法至少要考虑以 ...
- 杭电 2029 Palindromes _easy version
Problem Description "回文串"是一个正读和反读都一样的字符串,比如"level"或者"noon"等等就是回文串.请写一个 ...
- Codeforces 486B - OR in Matrix
矩阵的 OR ,也是醉了. 题目意思很简单,就是问你有没有这么一个矩阵,可以变化,得到输入的矩阵. 要求是这个矩阵每行都可以上下任意移动,每列都可以左右任意移动. 解题方法: 1.也是导致我WA 的原 ...
- BNU 4067 求圆并
好久没写过单组数据的题目了 QAQ 赤裸裸的模板题 #include <cstdio> #include <cstring> #include <iostream> ...
- 17.1.1 How to Set Up Replication
17.1.1 How to Set Up Replication 17.1.1.1 Setting the Replication Master Configuration 17.1.1.2 Sett ...
- cocos2dx进阶学习之CCEGLView
继承关系 CCEGLView-> CCEGLViewProtocol CCEGLView是窗口,在不同平台上有不同的实现,而CCEGLViewProtocol是CCEGLView定义的接口,所以 ...
- 建立Go工作环境
最近在折腾Go语言,找了个开源项目nsq研究源代码.不过前两天不小心把系统搞挂了,这次又要重做一遍,记录一下,备忘. 准备: 1. vim+golang插件+ctags(新版本支持Go) 2. Go1 ...
- oracle db server 改动主机名时的注意事项
參考: Configuring The DB After Host Name Change (Doc ID 465545.1) 总结要点例如以下: 1. 注意改动listener.ora 和tnsna ...