如何有效推广个人网站?了解五种主流的宣传手段
摘要:个人建设网站难吗,网站宣传的手段有哪些?(写出五种以上),甘肃网站优化,标书制作一般给多少钱并发性:并发执行的各个进程之间,既有独立性,又有制约性&a
个人建设网站难吗,网站宣传的手段有哪些?(写出五种以上),甘肃网站优化,标书制作一般给多少钱并发性#xff1a;并发执行的各个进程之间#xff0c;既有独立性#xff0c;又有制约性#xff1b;
独立性#xff1a;各进程可独立地向前推进#xff1b;
制约性#xff1a;一个进程会受到其他进程的影响#xff0c;这种影响关系可能有3种形式#xff1a;
互斥并发执行的各个进程之间既有独立性又有制约性
独立性各进程可独立地向前推进
制约性一个进程会受到其他进程的影响这种影响关系可能有3种形式
互斥一种竞争关系同步一种协作关系通信交换信息
5.1 并发的原理
5.1.1 与时间有关的错误
现在有P1和P2两个进程共享一个变量count 由于两个进程是异步的所以它们执行的顺序不确定这就会造成运行结果不可再现除非规定它们使用共享变量的先后顺序。
5.1.2 互斥与同步的概念
进程的同步系统中多个进程中发生的事件存在某种时序关系需要相互合作共同完成一项任务即
一个进程运行到某一点时要求另一伙伴进程为它提供消息未获得消息之前该进程处于等待状态获得消息后被唤醒进入就绪状态。
两个进程可以类比为接力赛中一前一后的两个队友 进程的互斥
互斥——不能“同时”的操作对于系统一些共享资源只有被释放后才可以重新被操作
进程互斥——进程间竞争使用不能被“同时”操作的共享资源的关系。
5.1.3 临界区与进程互斥
1. 临界资源
系统中某些资源一次只允许一个进程使用称这样的资源为临界资源或互斥资源或共享变量。
2. 临界区
在进程中涉及到临界资源的程序段叫做临界区。多个进程指针对统一资源的临界区称为相关临界区。 3. 实现各进程互斥进入临界区互斥使用临界资源
进程需要在临界区前加上一段用于申请资源的代码称为进入区在临界区后加上一段用于释放资源的代码称为退出区。 while ( 1 ) { 进入区代码使用前申请 临界区代码使用临界资源 退出区代码释放资源 其余代码 } 4. 进入临界区使用临界资源的四项原则
空闲让进当无进程在互斥区时任何有权使用互斥区的进程可进入忙则等待不允许两个以上的进程同时进入互斥区有限等待任何人进入互斥区的要求应在有限的时间内得到满足让权等待处于等待状态的进程应放弃占用CPU以使其他进程有机会得到CPU的使用权。
5. 进程互斥的解决主要有两种分别是硬件方法和软件方法。
5.1.4 硬件支持互斥的方法
1. 中断禁用为保证互斥只需保证进程不被中断就可以了通过系统中有关中断的原语即可实现。其实就是把中断这个操作当作临界资源来看。
2. 专用机器指令就是设置一个bolt值通过它来看是否可以使用临界资源 5.2 信号量机制
5.2.1 信号量的概念
信号量定义
信号量是一个记录型的数据结构
定义如下
struct semaphore {int value; //信号量的值pointer_PCB queue;
}
semaphore s; // 定义s为信号量
P、V操作
除初始化外仅能通过两个标准的原子操作 wait(s) 和 signal(s) 来访问信号量。这两个操作一直被称为P、V操作。
原子操作原语在执行上不可被中断的操作。
P、V操作定义
P(s) { // wait(s)s.value--;if (s.value 0)block(s.queue);
// 将调用该P操作的进程放入与s有关的阻塞队列
}
V(s) { // signal(s)s.value;if (s.value 0)wakeup(s.queue);
// 从有关s的阻塞队列唤醒一个进程放入就绪队列
}
P、V操作的含义
信号量 s 的物理含义
s 0 表示有 s 个资源可用s 0 表示无资源可用s 0 则 s 绝对值就是等待队列中的进程个数
P、V操作的含义
P(s) 表示申请一个资源V(s) 表示释放一个资源
信号量的初值应 0 信号量的使用
必须设置一次且只能设置一次初值
初值不能为负数
只能通过 wait(s) 和 signal(s) 来操作信号量。
如何用信号量实现进程间互斥问题
找出临界资源设置信号量。有几类资源就设置几个信号量对每类资源资源数量就是对应的信号量初值划分处临界区涉及到临界资源的代码不要人为添加条件临界区前加上对应信号量的P操作临界区后加上对应信号量的V操作。
5.2.2 信号量的应用
利用信号量实现进程互斥
设P1和P2是两个进程它们都需要使用打印机进行打印这时可以定义一个信号量mutex其初值为1用于实现P1、P2进程对打印机的互斥访问
semaphore mutex 1; // 表示现有的打印机资源数量为1//P1
while (true) {P(mutex);use printer;V(mutex);
}//P2
while (true) {P(mutex);use printer;V(mutex);
}
利用信号量实现进程同步前驱关系
现有两个进程P1和P2其中P1需要先执行才能执行P2遵循两者的执行顺序我们可以画出进程的前驱图 这其中s是我们设置的信号量其初值为0所以在执行中需要先进行V操作再进行P操作--由此可以实现进程同步
semaphore s 0; //P1
{P1 code;V(s);
}//P2
{P2 code;P(s);
}
如此可以实现先执行P1再执行P2。
5.2.3 生产者 - 消费者问题
1. 单缓冲区生产者进程P和消费者进程C共用一个缓冲区P生产产品放入缓冲区C从缓冲区取产品来消费。 单缓冲区面临的问题
单缓冲区的同步问题
当缓冲区存在空位的时候P进程才能往里面放产品设置信号量为empty初值为1表明缓冲区存在空位当缓冲区有产品的时候C进程才能从里面取产品设置信号量为full初值为0因为缓冲区刚开始是没有产品的
单缓冲区互斥问题
P、C进程不能同时使用缓冲区
1. 单缓冲区的生产者 - 消费者问题解
semaphore empty 1; // 表示缓冲区空位数
semaphore full 0; //表示缓冲区产品数//P进程
while (true) {produce a product;P(empty);put product in buffer;V(full);
}//C进程
while (true) {P(full);get product from buffer;V(empty);consume the product;
}
2. 多缓冲区的单生产者 - 单消费者问题解 semaphore empty n; // 表示缓冲区有n个空位
semaphore full 0;//P进程
while (true) {produce a product;P(empty);put product in buffer[in];in (in 1) mod n; //将产品放入缓冲区中后in指针向后移动一位这里的缓冲区相当于一个栈V(full);
}//V进程
while (true) {P(full);get product from buffer[out];out (out 1) mod n;V(empty);consume the product;
}
3. 多生产者多消费者多个缓冲区
因为多个生产者和多个消费者都要使用到缓冲区所以缓冲区就是我们的临界资源为了实现生产者之间以及消费者之间的互斥关系需要引进信号量mutex并且其C、V操作需要放在临界区前后
semaphore empty n;
semaphore full 0;
semaphore mutex 1; // 实现同类进程间对缓冲区的互斥访问//P进程
while (true) {produce a product;P(empty);P(mutex);put product in buffer[in];in (in 1) mod n;V(mutex);V(full);
}//V进程
while (true) {P(full);P(mutex);get product from buffer[out];out (out 1) mod n;V(mutex);V(empty);consume the product;
}
多缓冲区面临的问题
同步当缓冲区已放满了产品时生产者进程必须等待当缓冲区已空时消费者进程应该等待
互斥所有进程应互斥使用缓冲区资源
实际上在多缓冲情况下为提高系统并发性只是同类进程应当互斥
在多缓冲区问题中如果把进程P或C的mutex和另一个相邻的变量互换就会发生死锁死锁就是在一个进程进展到某一步时被其他进程抢占后进入阻塞状态其他进程由于某一变量未达到条件也进入了阻塞状态。所以记住要把mutex放里面不包含其他的变量。
多缓冲区的生产者 - 消费者问题解法2
设置两个不相干的mutex变量这样就只是同类进程间互斥提高了系统并发性。
如何用信号量解决进程间同步问题
找出进程间的前驱关系针对每个前驱关系设置信号量通常初值为0具体情况要根据题目来分析前驱进程的后面加上对应信号量的V操作后继进程的前面加上对应信号量的P操作。 5.2.5 读者 - 写者问题
有两组并发进程读者和写者共享一组数据区为保证数据的一致性和完整性规定如下
允许多个读者同时执行读操作不允许读者、写者同时操作不允许多个写者同时操作
若读者优先即当写者提出了写的要求后允许新的读者进入。则代码如下
wrt 1; // 表示能否写初始可写
mutex 1; // 实现不同读者进程的互斥访问
readcount 1; // 表示读进程数//读者进程
while (true) {P(mutex);readcount;if(readcount 1)P(wrt);V(mutex);read;P(mutex);readcount--;if(readcount 0)V(wrt);V(mutex);
}// 写者进程
while (true) {P(wrt);write;V(wrt);
}
信号量应用小结
P、V操作必须成对出现有一个P操作就一定有一个V操作
当信号量用于实现进程互斥时对于同一信号量的P、V操作处于同一进程
当信号量用于实现进程同步时对于同一信号量的P、V操作处于不同进程
如果P(S1)和P(S2)两个操作在一起那么P操作的顺序至关重要一个同步P操作与一个互斥P操作在一起时同步P操作在前互斥P操作在后而两个V操作则无关紧要。
