进程同步中的生产者_消费者模型分析

进程同步中的生产者_消费者模型分析
进程同步中的生产者_消费者模型分析

第20卷第4期 武汉科技学院学报V ol.20 No.4 2007年4月 JOURNAL OF WUHAN UNIVERSITY OF SCIENCE AND ENGINEERING Apr. 2007 进程同步中的生产者—消费者模型分析

帖军,陈幼均

(中南民族大学计算机科学学院,湖北武汉 430074)

摘要:指出了复杂并发进程控制模型中同步和互斥关系处理的一般准则。以生产者—消费者模型为

例,根据缓冲区数量、生产者进程数量和消费者进程数量的不同,将其细分为4种不同的子模型,并

对其中的同步和互斥关系分别进行了分析,给出了各种情况下基于P、V原语和信号量机制的具体解

决方案。

关键词:进程;同步;互斥;信号量

中图分类号:TP311.1 文献标识码:A 文章编号:1009-5160(2007)-0030-05

生产者-消费者模型是现代操作系统中典型的进程同步互斥问题,大量的多进(线)程通信系统应用都可以抽象为该模型的不同形式。因此,该模型的算法实现在这些领域具有极其重要的应用价值。目前各操作系统关于进程间同步互斥问题的主要解决手段一般都基于P、V原语和信号量机制,但P、V原语和信号量的应用分析和具体控制异常复杂,使用不当很容易引发死锁等一系列问题[1]。本文的主要目的在于给出一个典型的同步互斥关系处理规则,并在该规则指导下,对生产者-消费者模型的各种不同情况进行具体分析,最终给出完善的基于P、V原语和信号量机制的解决方案。

1 生产者-消费者问题模型

1.1 问题描述

一个仓库用于临时性存放物品。生产者不断地进行生产,每生产出一件产品,就将该产品放入仓库,仓库放满后则暂停生产。消费者不断地从仓库中取出一件物品,然后进行消费,仓库取空后则暂停消费。

1.2 模型分析

可以将仓库抽象为计算机内存中的缓冲区,生产者和消费者抽象为不同的并发进程。在现代操作系统中,一般并发进程间的执行是相互独立,互不干涉的。但在本模型中,由于生产者和消费者进程间出现了共同的操作对象(缓冲区),因此两者的执行必须采取一定的控制进行协调,否则很可能因为彼此不同步而出现数据丢失或者重复读取等问题[2]。

1.3 典型同步互斥关系处理规则

对于复杂的并发进程控制模型,首先应当确定并发进程间的制约关系究竟是由于彼此协作而导致互相等待的直接制约,还是由于操作共同的排他性临界资源而导致的间接制约,进而将该组并发进程定性为同步关系(直接制约)或者互斥关系(间接制约)[3]。

对于同步关系的处理规则如下:

(1)确定导致同步关系的各个协作点,针对该协作点设置同步信号量,协作点以前发生的动作称为前驱,协作点以后发生的动作称为后继。同步信号量的初值设为后继动作所需资源在系统初始时的实际值。

(2)在每个后继动作之前加P操作,以试探是否可以得到所需资源并进一步执行;在每个前驱动作之后

收稿日期:2006-10-14

作者简介:帖军(1976-),男,讲师,硕士,研究方向:分布式系统.

基金项目:中南民族大学科研基金资助项目(项目编号:YZY06008)

第4期 帖军,等:进程同步中的生产者—消费者模型分析31

加V操作,以产生资源并唤醒阻塞在后继动作上的等待进程。

对于互斥关系的处理规则如下:

(1)确定导致互斥关系的各个临界资源,针对该临界资源设置互斥信号量,由于临界资源是排他性使用资源,相当于在同一时刻只有一个资源可用,因此该互斥信号量初值设为1。

(2)把对临界资源进行操作的代码段设置为临界区,为保证同一时刻只有一个进程进入临界区,在临界区之前加P操作,以试探是否可以锁定临界资源进入临界区;在临界区之后加V操作,以释放临界资源并唤醒等待进程。

很显然,在生产者-消费者模型中,同步关系和互斥关系是并存的。在上述处理规则的指导下,本文通过对缓冲区数量、生产者进程数量、消费者进程数量的不同情况进行分析,将生产者-消费者模型划分为单缓冲区的单生产者-单消费者模型、单缓冲区的多生产者-多消费者模型、多缓冲区的单生产者-单消费者模型、多缓冲区的多生产者-多消费者模型等4种情况分别进行讨论。

2 单缓冲区的单生产者-单消费者问题模型

限制条件:整个系统仅有唯一的一个缓冲区,活动进程仅有一个生产者Producer和一个消费者Consumer。

2.1 进程关系分析

同步关系:(1)只有在Producer向缓冲区放入物品后,Consumer才能够从缓冲区中取出物品消费;因此存在Consumer对于Producer的同步依赖。(2)只有在Consumer从缓冲区取出物品后,Producer才能够继续向缓冲区中放入新生产的物品;因此存在Producer对于Consumer的同步依赖。

互斥关系:(1)Producer放入物品的同时,Consumer是不能从缓冲区中取出物品的;反之亦然。因此存在Producer和Consumer之间的互斥关系。

2.2 信号量设置

同步关系(1)表示Consumer需要一定的满缓冲区资源,因此需要设置满缓冲区同步信号量Sem_FullBuffer,又因初始时无任何产品,所以满缓冲区初值为0。

同步关系(2)表示Producer需要一定的空缓冲区资源,因此设置空缓冲区同步信号量Sem_EmptyBuffer,又因初始时无任何产品,所以空缓冲区初值为1。

互斥关系(1)表示Producer和Consumer对于缓冲区的操作是排他性的,因此设置互斥信号量mutex_Buffer,互斥信号量初值固定为1。

最终信号量设置如下:

Semaphore Sem_FullBuffer = 0;

Semaphore Sem_EmptyBuffer = 1;

Mutex mutex_Buffer = 1; //①

2.3 P、V控制的算法实现

算法实现:

Producer(生产者进程)Consumer(消费者进程)

while(TRUE){ while(TRUE){

生产物品; P(Sem_FullBuffer)

P(Sem_EmptyBuffer) P(mutex_Buffer) //①

P(mutex_Buffer) //①从缓冲区中取出物品;

将物品放入缓冲区;V(mutex_Buffer) //①

V(mutex_Buffer) //①V(Sem_EmptyBuffer)

V(Sem_FullBuffer) 消费物品;

} }

2.4 算法效果分析

2.3中的P、V控制算法实现可以有效地保证生产者和消费者彼此交替、同步工作,从而避免了生产者速度过快导致的数据丢失以及消费者速度过快导致的数据重复读取。

但对于上述算法中的同步关系进一步分析可知,同步协作中强调的前驱与后继关系实际上已经包含了不能

32

武汉科技学院学报2007年同时发生这一要求,因此算法中标识①的互斥控制语句完全可以省略,丝毫不会影响控制效果。也就是说,该模型下的同步已经天然地包含了互斥的处理。

3 单缓冲区的多生产者-多消费者问题模型

限制条件:整个系统仅有唯一的一个缓冲区,活动进程有n个生产者Producer和m个消费者Consumer。

3.1 进程关系分析

同步关系:(1)对于任意的i(1≤i≤n),j(1≤j≤m),只有在Producer i向缓冲区放入物品后,Consumer j 才能够从缓冲区中取出物品消费;因此存在Consumer j对于Producer i的同步依赖。(2)对于任意的i(1≤i≤n),j(1≤j≤m),只有在Consumer j从缓冲区取出物品后,Producer i才能够继续向缓冲区中放入新生产的物品;因此存在Producer i对于Consumer j的同步依赖。

互斥关系:(1)对于任意的i(1≤i≤n),j(1≤j≤m),Producer i放入物品的同时,Consumer j是不能从缓冲区中取出物品的;反之亦然。因此存在Producer i和Consumer j之间的互斥关系。(2)对于任意的i(1≤i≤n),j(1≤j≤n),i≠j,Producer i放入物品的同时, Producer j是不能放入物品的。因此存在Producer i和Producer j 之间的互斥关系。(3)对于任意的i(1≤i≤m),j(1≤j≤m),i≠j, Consumer i从缓冲区中取出物品的同时,Consumer j是不能从缓冲区中取出物品的。因此存在Consumer i和Consumer j之间的互斥关系。

3.2 信号量设置

同步关系(1)的处理同2.2中同步关系(1)的处理;同步关系(2)的处理同2.2中同步关系(2)的处理。

互斥关系(1)(2)(3)表示任意生产者和任意消费者对于缓冲区的操作是排他性的,因此设置互斥信号量mutex_Buffer,互斥信号量初值固定为1。

最终信号量设置如下:

Semaphore Sem_FullBuffer = 0;

Semaphore Sem_EmptyBuffer = 1;

Mutex mutex_Buffer = 1; //①

3.3 P、V控制的算法实现

算法实现与2.2中的算法实现相同。

3.4 算法效果分析

2.4中的算法效果分析在此模型中同样适用。另外,对于任意Producer i和Producer j之间的互斥、任意Consumer i和Consumer j之间的互斥,由于Sem_FullBuffer同步信号量和Sem_EmptyBuffer同步信号量的最大值都不会超过1,这恰恰是互斥信号量的上限。因此,这两种互斥关系也被同步天然地处理了,所以此算法中标识①的互斥控制语句也完全可以省略。

4 多缓冲区的单生产者-单消费者问题模型

限制条件:整个系统有K个缓冲区,活动进程仅有一个生产者Producer和一个消费者Consumer。

4.1 进程关系分析

同步关系:(1)只有在Producer向缓冲区放入物品后,Consumer才能够从缓冲区中取出物品消费;因此存在Consumer对于Producer的同步依赖。(2)只有在Consumer从缓冲区取出物品后,Producer才能够继续向缓冲区中放入新生产的物品;因此存在Producer对于Consumer的同步依赖。

互斥关系:(1)对于任意的i(1≤i≤K),j(1≤j≤K),i≠j,Producer向空闲缓冲区Buffer[K i]放入物品的同时,Consumer可以从满缓冲区Buffer[K j]中取出物品;反之亦然。因此Producer和Consumer之间不存在针对缓冲区的互斥关系。(2)尽管Producer和Consumer之间不存在针对缓冲区的互斥关系,但由于Producer 和Consumer都需要在操作缓冲区的同时对缓冲区队列进行维护,缓冲区队列也就成为两者间新的临界资源,因此Producer和Consumer之间出现了针对缓冲区队列的互斥关系。

4.2 信号量设置

同步关系(1)的处理同2.2中同步关系(1)的处理;同步关系(2)的处理同2.2中同步关系(2)的处理。

互斥关系(2)表示Producer和Consumer对于缓冲区队列的操作是排他性的,因此设置互斥信号量

第4期 帖军,等:进程同步中的生产者—消费者模型分析33

mutex_Queue,互斥信号量初值固定为1。

最终信号量设置如下:

Semaphore Sem_FullBuffer = 0;

Semaphore Sem_EmptyBuffer = 1;

Mutex mutex_Queue = 1; //②

4.3 P、V控制的算法实现

算法实现:

Producer(生产者进程)Consumer(消费者进程)

while(TRUE){ while(TRUE){

生产物品; P(Sem_FullBuffer)

P(Sem_EmptyBuffer) P(mutex_Queue) //②

P(mutex_Queue) //②从缓冲区中取出物品;

将物品放入缓冲区;V(mutex_Queue) //②

V(mutex_Queue) //②V(Sem_EmptyBuffer)

V(Sem_FullBuffer) 消费物品;

} }

4.4 算法效果分析

在本模型中,由于Sem_FullBuffer同步信号量和Sem_EmptyBuffer同步信号量的最大值都有可能超过1,即超出互斥信号量的上限。因此,本模型中同步无法取代互斥控制,所以此算法中标识②的互斥控制语句不能省略。

5 多缓冲区的多生产者-多消费者问题模型

限制条件:整个系统有K个缓冲区,活动进程有n个生产者Producer和m个消费者Consumer。

5.1 进程关系分析

同步关系:(1)对于任意的i(1≤ i ≤n),j(1≤j≤m),只有在Producer i向缓冲区放入物品后,Consumer j 才能够从缓冲区中取出物品消费;因此存在Consumer j对于Producer i的同步依赖。(2)对于任意的i(1≤i≤n),j(1≤j≤m),只有在Consumer j从缓冲区取出物品后,Producer i才能够继续向缓冲区中放入新生产的物品;因此存在Producer i对于Consumer j的同步依赖。

互斥关系:(1)对于任意的i(1≤i≤n),j(1≤j≤m),s(1≤s≤K),t(1≤t≤K),s≠t,Producer i向空闲缓冲区Buffer[K s]放入物品的同时,Consumer j可以从满缓冲区Buffer[K t]中取出物品;反之亦然。因此Producer i和Consumer j之间不存在针对缓冲区的互斥关系。(2)对于任意的i(1≤i≤n),j(1≤j≤n),i≠j,s(1≤s≤K),t(1≤t≤K),s≠t,Producer i向空闲缓冲区Buffer[K s]放入物品的同时,Producer j是可以向另一空闲缓冲区Buffer[K t]放入物品的。因此Producer i和Producer j之间不存在针对缓冲区的互斥关系。(3)对于任意的i(1≤i≤m),j(1≤j≤m),i≠j,s(1≤s≤K),t(1≤t≤K),s≠t,Consumer i从空闲缓冲区Buffer[K s]中取出物品的同时,Consumer j是可以从另一空闲缓冲区Buffer[K t] 中取出物品的。因此Consumer i和Consumer j 之间不存在针对缓冲区的互斥关系。(4)对于任意的i(1≤i≤n),j(1≤j≤n),i≠j,s(1≤s≤m),t(1≤t ≤m),s≠t,尽管Producer i和Producer j之间、Consumer s和Consumer t之间、Producer i和Consumer s之间不存在针对缓冲区的互斥关系,但由于Producer i、Producer j、Consumer s和Consumer t都需要在操作缓冲区的同时对缓冲区队列进行维护,缓冲区队列成为所有进程间的新的临界资源,因此Producer i和Producer j之间、Consumer s 和Consumer t之间、Producer i和Consumer s之间出现了针对缓冲区队列的互斥关系。

5.2 信号量设置

同步关系(1)的处理同2.2中同步关系(1)的处理;同步关系(2)的处理同2.2中同步关系(2)的处理。

互斥关系(4)的处理同4.2互斥关系(2)的处理。

最终信号量设置如下:

Semaphore Sem_FullBuffer = 0;

Semaphore Sem_EmptyBuffer = 1;

Mutex mutex_Queue = 1; //②

34

武汉科技学院学报2007年5.3 P、V控制的算法实现

算法实现与4.2中的算法实现相同。

5.4 算法效果分析

4.4中的算法效果分析在此模型中同样适用。

6 结论

对于复杂的并发进程控制模型,其P、V原语和信号量控制实际是有一定的处理规则可以参考的。对于生产者-消费者模型,其互斥控制与否是由缓冲区的数量决定的。当缓冲区数量最大值为1时,同步信号量的取值不会超过互斥信号量的上限,此时的同步控制完全可以替代互斥控制。

参考文献:

[1] 帖军. 同步互斥机制中的读者-写者模型[J].中南民族大学学报(自然科学版),2005,24(3):67~70.

[2] Gary Nutt. Operating systems: A Modern Perspective[M]. Utah: Posts & Telecommunication Press, 2002. 233~234.

[3] William S. Operating systems: internals and design principles[M].New York: Prentice Hall,2003.148~149.

A Study on Model of Producer-Consumer in

Process Synchronization Mechanism

TIE Jun, CHEN You-jun

(College of Computer Science, South-Central University For Nationalities, Wuhan Hubei 430074, China)

Abstract: This article points out the general principles in dealing with the synchronization and mutual exclusion in the control model of complex process concurrency. With the example of producer-consumer model, the author divides into four different sub-models according to the different number of buffer, producer, and consumer. Furthermore, this article also suggests detailed solutions based on PV and semaphore mechanism under different circumstances.

Keywords: process; synchronization; mutual exclusion; semaphore

生产者-消费者模型的多线程实验指导

一、预备知识 ●有 C 语言基础 ●掌握在 Linux 下常用编辑器的使用 ●掌握Linux下的程序编译过程 ●学习pthread库函数的使用 ●掌握共享锁和信号量的使用方法 ●掌握make和makefile工具编译程序 二、实验设备及工具 硬件:PC机P entium500以上,硬盘40G以上, 内存大于128M。 软件:PC机操作系统REDHAT LIN UX9.0 三、实验流程 生产者写入缓冲区和消费者从缓冲区读数的具体流程,生产者首先要获得互斥锁,并且判断写指针+1 后是否等于读指针,如果相等则进入等待状态,等候条件变量notfull;如果不等则向缓冲区中写一个整数,并且设置条件变量为notempty,最后释放互斥锁。消费者线程与生产者线程类似。流程图如下: 生产者-消费者实验源代码结构流程 四、实验源代码:

#include #include #include #include "pthread.h" #define BUFFER_SIZE 16 /* 设置一个整数的圆形缓冲区*/ structprodcons { int buffer[BUFFER_SIZE]; /* 缓冲区数组*/ pthread_mutex_t lock; /* 互斥锁*/ intreadpos, writepos; /* 读写的位置*/*/ pthread_cond_tnotempty; /* 缓冲区非空信号*/ pthread_cond_tnotfull; /*缓冲区非满信号*/ }; /*--------------------------------------------------------*/ /*初始化缓冲区*/ voidinit(structprodcons * b) { pthread_mutex_init(&b->lock, NULL); pthread_cond_init(&b->notempty, NULL); pthread_cond_init(&b->notfull, NULL); b->readpos = 0; b->writepos = 0; } /*--------------------------------------------------------*/ /* 向缓冲区中写入一个整数*/ void put(structprodcons * b, int data) { pthread_mutex_lock(&b->lock);/*获取互斥锁*/ /*等待缓冲区非满*/ while ((b->writepos + 1) % BUFFER_SIZE == b->readpos) { printf("wait for not full\n"); pthread_cond_wait(&b->notfull, &b->lock);/*等待状态变量b->notfull,不满则跳出阻塞*/ } /*写数据并且指针前移*/ b->buffer[b->writepos] = data; b->writepos++; if (b->writepos>= BUFFER_SIZE) b->writepos = 0; /*设置缓冲区非空信号*/ pthread_cond_signal(&b->notempty); /*设置状态变量*/ pthread_mutex_unlock(&b->lock); /*//释放互斥锁*/

进程同步机制与互斥-生产者消费者问题

学习中心: 专业: 年级:年春/秋季 学号: 学生: 题目:进程同步与互斥生产者-消费者问题 1.谈谈你对本课程学习过程中的心得体会与建议? 转眼间,学习了一个学期的计算机操作系统课程即将结束。在这个学期中,通过老师的悉心教导,让我深切地体会到了计算机操作系统的一些原理和具体操作过程。在学习操作系统之前,我只是很肤浅地认为操作系统只是单纯地讲一些关于计算机方面的操作应用,并不了解其中的具体操作过程 1.1设计思路 在这次设计中定义的多个缓冲区不是环形循环的,并且不需要按序访问。其中生产者可以把产品放到某一个空缓冲区中,消费者只能消费被指定生产者生产的产品。本设计在测试用例文件中指定了所有生产和消费的需求,并规定当共享缓冲区的数据满足了所有有关它的消费需求后,此共享才可以作为空闲空间允许新的生产者使用。

本设计在为生产者分配缓冲区时各生产者之间必须互斥,此后各个生产者的具体生产活动可以并发。而消费者之间只有在对同一个产品进行消费时才需要互斥,它们在消费过程结束时需要判断该消费者对象是否已经消费完毕并释放缓冲区的空间。 1.2程序流程图 1.3基本内容 在设计程序时主要有三个主体部分、三个辅助函数和一个数据结构。 其中主体部分为一个主函数main(),用于初始化缓冲区和各个同步对象,并完成线程信息的读入,最后根据该组的线程记录启动模拟线程,并等待所有线程的运 Y

行结束后退出程序; 生产者函数Produce()和消费者函数Consume(),生产者和消费者函数运行于线程中完成对缓冲区的读、写动作,根据此处生产消费的模型的特点,生产者和消费者之间通过使用同步对象实现了生产和消费的同步与互斥,是本实验的核心所在。 另外三个辅助性函数被生产者和消费者函数调用,是上述生产和消费函数中对缓冲区进行的一系列处理。 3)在实现本程序的消费生产模型时,具体的通过如下同步对象实现互斥: ①设一个互斥量h_mutex,以实现生产者在查询和保留缓冲区内的下一个位置时进行互斥。 ②每一个生产者用一个信号量与其消费者同步,通过设置h_Semaphore[MAX_THREAD_NUM]信号量 ③数组实现,该组信号量用于相应的产品已产生。同时用一个表示空缓冲区

生产者消费者问题设计与实现

操作系统课程设计任务书

目录

1.选题背景 生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。解决生产者/消费者问题的方法可分为两类:(1)采用某种机制保护生产者和消费者之间的同步;(2)在生产者和消费者之间建立一个管道。第一种方式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。第二种管道缓冲区不易控制,被传输数据对象不易于封装等,实用性不强。因此本文只介绍同步机制实现的生产者/消费者问题。 同步问题核心在于:如何保证同一资源被多个线程并发访问时的完整性。常用的同步方法是采用信号或加锁机制,保证资源在任意时刻至多被一个线程访问。Java语言在多线程编程上实现了完全对象化,提供了对同步机制的良好支持。在Java中一共有四种方法支持同步,其中前三个是同步方法,一个是管道方法。 2.设计思路 .生产者—消费者问题是一种同步问题的抽象描述。 计算机系统中的每个进程都可以消费或生产某类资源。当系统中某一进程使用某一资源时,可以看作是消耗,且该进程称为消费者。 而当某个进程释放资源时,则它就相当一个生产者 3.过程论述 首先,生产者和消费者可能同时进入缓冲区,甚至可能同时读/写一个存储单元,将导致执行结果不确定。这显然是不允许的。所以,必须使生产者和消费者互斥进入缓冲区。即某时刻只允许一个实体(生产者或消费者)访问缓冲区,生产者互斥消费者和其他任何生产者。 其次,生产者不能向满的缓冲区写数据,消费者也不能在空缓冲区中取数据,即生产者与消费者必须同步。当生产者产生出数据,需要将其存入缓冲区之前,首先检查缓冲区中是否有“空”存储单元,若缓冲区存储单元全部用完,则生产者必须阻塞等待,直到消费者取走一个存储单元的数据,唤醒它。若缓冲区内有“空”存储单元,生产者需要判断此时是否有别的生产者或消费者正在使用缓冲区,若是有,则阻塞等待,否则,获得缓冲区的使用权,将数据存入缓冲区,释放缓冲区的使用权。消费者取数据之前,首先检查缓冲区中是否存在装有数据的存储单元,若缓冲区为“空”,则阻塞等待,否则,判断缓冲区是否正在被使用,

生产者消费者问题模拟实现(z)

生产者-消费者实验 1.1实验目的和要求 1.1.1实验目的 操作系统的基本控制和管理控制都围绕着进程展开,其中的复杂性是由于支持并发和并发机制而引起的。自从操作系统中引入并发程序设计后,程序的执行不再是顺序的,一个程序未执行完而另一个程序便已开始执行,程序外部的顺序特性消失,程序与计算不再一一对应。并发进程可能是无关的,也可能是交互的。然而,交互的进程共享某些变量,一个进程的执行可能会影响其他进程的执行结果,交互的并发进程之间具有制约关系、同步关系。其中典型模型便是生产者-消费者模型。 本实验通过编写和调试生产者-消费者模拟程序,进一步认识进程并发执行的实质,加深对进程竞争关系,协作关系的理解,掌握使用信号量机制与P、V操作来实现进程的同步与互斥。 1.1.2实验要求 1.用高级语言编写一个程序,模拟多个生产者进程和多个消费者进程并发执行,并采用信号量机制与P、V操作实现进程间同步与互斥。 2.撰写实验报告,报告应包含以下内容: (1)实验目的; (2)实验内容; (3)设计思路; (4)程序流程图; (5)程序中主要数据结构和函数说明; (6)带注释的源程序代码; (7)程序运行结果及分析; (8)实验收获与体会。 1.2预备知识 1.2.1生产者—消费者问题 生产者—消费者问题表述如下:如图3.1所示,有n个生产者和m个消费者,连接在具

有k个单位缓冲区的有界环状缓冲上,故又称有界缓冲问题。生产者不断生成产品,只要缓冲区未满,生产者进程pi所生产的产品就可投入缓冲区;类似的,只要缓冲区非空,消费者进程cj就可以从缓冲区取走并消耗产品。 图 3.1 生产者—消费者问题示意图 著名的生产者—消费者问题(producer-consumer problem)是计算机操作系统中并发进程内在关系的一种抽象,是典型的进程同步问题。在操作系统中,生产者进程可以是计算进程、发送进程,而消费者进程可以是打印进程、接收进程等,解决好生产者—消费者问题就解决了一类并发进程的同步问题。 操作系统实现进程同步的机制称为同步机制,它通常由同步原语组成。不同的同步机制采用不同的同步方法,迄今已设计出多种同步机制,本实验采用最常用的同步机制:信号量及PV操作。 1.2.2信号量与PV操作 1965年,荷兰计算机科学家E.W.Dijkstra提出新的同步工具——信号量和PV操作,他将交通管制中多种颜色的信号灯管理方法引入操作系统,让多个进程通过特殊变量展开交互。一个进程在某一关键点上被迫停止直至接收到对应的特殊变量值,通过这一措施任何复杂的进程交互要求均可得到满足,这种特殊变量就是信号量(semaphore)。为了通过信号量传送信号,进程可利用P和V两个特殊操作来发送和接收信号,如果协作进程的相应信号仍未到达,则进程被挂起直至信号到达为止。 在操作系统中用信号量表示物理资源的实体,它是一个与队列有关的整型变量。具体实现时,信号量是一种变量类型,用一个记录型数据结构表示,有两个分量:一个是信号量的值,另一个是信号量队列的指针。信号量在操作系统中主要用于封锁临界区、进程同步及维护资源计数。除了赋初值之外,信号量仅能由同步原语PV对其操作,不存在其他方法可以检查或操作信号量,PV操作的不可分割性确保执行的原子性及信号量值的完整性。利用信号量和PV操作即可解决并发进程竞争问题,又可解决并发进程协作问题。 信号量按其用途可分为两种:公用信号量,联系一组并发进程,相关进程均可在此信号量上执行PV操作,用于实现进程互斥;私有信号量,联系一组并发进程,仅允许此信号量所拥有的进程执行P操作,而其他相关进程可在其上执行V操作,初值往往为0或正整数,多用于并发进程同步。

消费者选择模型在市场营销中的个案分析

消费者选择模型在市场营销中的个案分析 ——诺贝尔经济学奖理论在中国市场的实践 王风华1 【Abstract】 This paper introduces 2000 Economics Nobel Prize winning discrete choice model and its estimation method. It develops a consumer choice modeling framework based on the discrete choice theory and estimates factors that affect article reading probability on a data set of 57505 reading decisions extracted from the survey of 465 readers of three major Shanghai newspapers in 2005. The paper identifies interesting and significant reading patterns. In summary, there are mainly three groups of article factors that affect reading decisions of newspaper readers. The first group includes content related characteristics and they affect article reading probability by about 20% to 60%. The second group includes factors related to publication time, page and section and they affect article reading probability by about 5% to 20%. The third group includes factors related to article display format such as its position on a page and these factors affect article reading probability by about 2% to 5%. 【Key Words】Newspaper, China Media Study, Discrete Choice Model, Consumer Choice Modeling 1 Dr. Wang is an applied econometrician and an expert in discrete choice models. Dr. Wang obtained his Ph.D. in economics from Boston University. His design of Consumer Choice Modeling framework has been applied in China by Sinomonitor Shanghai for companies such as Shanghai V olkswagon, Dongfeng Nissan Passenger Vehicle Company, Shanghai Mobile Communications Co., and Jiefang Daily Group. 作者是美国波士顿大学经济学博士、计量经济学家。作者基于诺贝尔经济学奖理论发展了消费者选择模型应用于中国市场,从2004年起作者作为消费者选择模型顾问与市场研究有限公司合作, 为上海大众、东风日产、上海移动、解放报业集团等企业提供品牌市场研究支持,积累了丰富的中国市场经验,此项研究是消费者选择模型的应用之一。

实验1:生产者消费者问题

福建农林大学金山学院实验报告 系(教研室):专业:计算机科学与技术年级: 实验课程:生产者与消费者实验姓名:学号: 实验室号:1#608 计算机号:实验时间:指导教师签字:成绩: 实验1:生产者消费者问题 一、实验目的 生产者消费者问题是操作系统中经典的同步和互斥问题。通过实验,要求学生掌握两者之间的同步信号量和互斥信号量的使用,更深刻了解临界资源、同步和互斥的概念。 二、实验要求 1.一组生产者通过一个具有N个缓冲区的缓冲池循环不断地向一组消费者提供产 品。 2.建一个队列, 队列的长度由n记录, 定义两个指针, 分别指向队列的头和尾消 费者从头指针读取数据,每读取一个数据把n--,生产者把数据写入尾指针, 每写入一个数据就n++,当n=N的时候生产者暂停写入数据。 3.注意:缓冲池队列,用互斥锁保护。 三、实验内容和原理 1.分别画出生产者和消费者的流程图

2.针对生产者和消费者问题,可以分为哪几种情况,使用了哪些原语?分别代表 什么意思?过程如何?阐述哪些进程之间存在同步,哪些进程之间存在互斥。 3.缓冲区是否为临界资源?是否可以循环使用?通过什么来实现?举例说明(可 画图) 四、实验环境 1. 硬件:PC机; 2. 软件:Windows操作系统、。 五、算法描述及实验步骤 #include <> #include const unsigned short SIZE_OF_BUFFER = 10; unsigned short ProductID = 0; unsigned short ConsumeID = 0;

unsigned short in = 0; unsigned short out = 0; int g_buffer[SIZE_OF_BUFFER]; bool g_continue = true; HANDLE g_hMutex; HANDLE g_hFullSemaphore; HANDLE g_hEmptySemaphore; DWORD WINAPI Producer(LPVOID); DWORD WINAPI Consumer(LPVOID); int main() { g_hMutex = CreateMutex(NULL,FALSE,NULL); g_hFullSemaphore = CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL); g_hEmptySemaphore = CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL); const unsigned short PRODUCERS_COUNT = 3; const unsigned short CONSUMERS_COUNT = 1; const unsigned short THREADS_COUNT = PRODUCERS_COUNT+CONSUMERS_COUNT; HANDLE hThreads[PRODUCERS_COUNT]; DWORD producerID[CONSUMERS_COUNT]; DWORD consumerID[THREADS_COUNT]; for (int i=0;i

消费者行为研究

现代消费者研究(市场调查中的一个重要环节)以实证主义方法为主流,实证主义的研究方法源于自然科学,包括实验、调查、观察法,其结果是对比较大的总体进行描述、检查和推理,收集的数据是量化的实际数据,并利用计算对它进行统计分析。 研究是探寻消费者行为规律、消费行为发生的原因、影响因素以及消费者行为之间的关系,研究不是毫无目的的收集消费行为方面的事实和信息,也不是不加解释地拼凑和记录消费行为的事实和信息而我们消费者行为研究的目的是去发现,去系统的收集数据资料、并系统的收集解释数据资料。 我们如何设计研究方法要定义所需要的信息有哪些,进而思考和说明测量工具的设计程序;设计调查问卷、访谈表、或者其它数据资料收集表格,并进行预测调查;最后我们要制定数据分析计划。数据资料收集的具体方法有:调查法、观察法、实验法消费者研究方法分析 1、聚类分析:根据研究对象间的相似性进行分类,对市场进行分层,寻找竞争对手从统计学的观点看,聚类分析是通过数据建模简化数据的一种方法。采用k-均值、k-中心点等算法的聚类分析工具已被加入到许多著名的统计分析软件包中,如SPSS、SAS等。聚类分析还可以作为其他算法(如分类和定性归纳算法)的预处理步骤。 2、回归分析:寻找某些事物的影响因素及其描述其影响程度。还可用于对某些事物的预测。回归分析是确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法。运用十分广泛,回归分析按照涉及的自变量的多少,可分为一元回归分析和多元回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。如果在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。 3、因子分析:因子分析是指研究从变量群中提取共性因子的统计技术。最早由英国心理学家C.E.斯皮尔曼提出。他发现学生的各科成绩之间存在着一定的相关性,一科成绩好的学生,往往其他各科成绩也比较好,从而推想是否存在某些潜在的共性因子,或称某些一般智力条件影响着学生的学习成绩。因子分析可在许多变量中找出隐藏的具有代表性的因子。将相同本质的变量归入一个因子,可减少变量的数目,还可检验变量间关系的假设。 4、差异性检验和方差分析:分析和检验不同类别或变量间是否存在显著差异方差分析是从观测变量的方差入手,研究诸多控制变量中哪些变量是对观测变量有显著影响的变量。由于各种因素的影响,研究所得的数据呈现波动状。造成波动的原因可分成两类,一是不可控的随机因素,另一是研究中施加的对结果形成影响的可控因素。 6、对应分析:用于探索和研究各分类变量之间的关系对应分析(Correspondence analysis)也称关联分析、R-Q型因子分析,是近年新发展起来的一种多元相依变量统计分析技术,通过分析由定性变量构成的交互汇总表来揭示变量间的联系。可以揭示同一变量的各个类别之间的差异,以及不同变量各个类别之间的对应关系。主要应用在市场细分、产品定位、地质研究以及计算机工程等领域中。原因在于,它是一种视觉化的数据分析方法,它能够将几组看不出任何联系的数据,通过视觉上可以接受的定位图展现出来。对应分析的基本思想是将一个联列表的行和列中各元素的比例结构以点的形式在较低维的空间中表示出来。它最大特点是能把众多的样品和众多的变量同时作到同一张图解上,将样品的大类及其属性在图上直观而又明了地表示出来,具有直观性。另外,它还省去了因子选择和因子轴旋转等复杂的数学运算及中间过程,可以从因子载荷图上对样品进行直观的分类,而且能够指示分类的主要参数(主因子)以及分类的依据,是一种直观、简单、方便的多元统计方法。对应分析法整个处理过程由两部分组成:表格和关联图。对应分析法中的表格是一个二维的表格,由行和列组成。每一行代表事物的一个属性,依次排开。列则代表不同的事

LabVIEW程序设计模式(五)—生产者消费者模式(2)_VI的可重入性(Reentrant Execution)

LabVIEW程序设计模式(五)—生产者/消费者模式(2)_VI的可重入性(Reentrant Execution) LabVIEW程序设计2009-05-19 17:06:34 阅读698 评论0 字号:大中小订阅 在介绍VI的动态调用之前有必要对LabVIEW在执行VI过程中的规则有个大致的了解。众所周知,LabVIEW是通过VI的文件名(VI Name)来表示独立的VI的,并不是VI的路径。因此,LabVIEW不允许具有相同名字的VI同时载入内存中,即使这些VI存储在不同的路径中。 在前面曾经提到,LabVIEW本身就是一种多线程设计的语言。那么当同一背面板中放置两个VI的实例时代码应该如何执行呢?在图29中,右侧是测试VI运行的时间,左侧是Wait.vi的具体实现代码,仅仅是等待一定的秒数。那么在右侧的VI中,输出的Time是多少呢?是3秒还是2秒? 图29 Reentrant Execution 打开VI的Highlight调试工具,可以看出两个Wait.vi实例的调用并不是同时执行的,而是依次按顺序执行的,至于哪一个实例先执行是不确定的。这是由于LabVIEW本身是并行设计的,从理论上而言,两个VI的实例是同步执行的,但是如果两个Wait.vi实例同时执行必定会产生参数赋值紊乱,因为LabVIEW只允许内存中存在一个名称的VI。因此,此时Time的输出结果是3秒。 如果在实际使用中需要这样的应用该如何解决呢?LabVIEW提供了VI的可重入技术,打开Wait.vi,单击按键,选择图30所示的Reentrant execution 选项。此时再次运行Time的输出结果是2秒。从Highlight的运行过程来看,两个Wait.vi实例是同时执行的,因此总的运行时间就是1秒。

操作系统实验报告生产者消费者问题

操作系统课程设计 一.实验目标 完成N个生产者和M个消费者线程之间的并发控制,N、M不低于30,数据发送和接收缓冲区尺寸不小于20个(每个产品占据一个)。 其中生产者线程1、3、5、7、9生产的产品供所有奇数编号的消费者线程消费,只有所有奇数编号的消费者线程都消费后,该产品才能从缓冲区中撤销。 其中生产者线程2、4、6、8、10生产的产品所有偶数编号的消费者线程都可消费,任一偶数编号消费者线程消费该消息后,该产品都可从缓冲区中撤销。 其中11-20号生产者线程生产的产品仅供对应编号的消费者线程消费。 其他编号生产者线程生产的产品可由任意的消费者线程消费。 每个生产线程生产30个消息后结束运行。如果一个消费者线程没有对应的生产者线程在运行后,也结束运行。所有生产者都停止生产后,如果消费者线程已经

没有可供消费的产品,则也退出运行。 二.实验原理 2.1原理 生产者与消费者线程采用posix互斥锁机制进行互斥进入各自的代码段,只有采用互斥锁临界区代码段才可以不被打扰的执行;同步机制采用的是posix条件变量pthread_cond_wait和pthraed_cond_signal进行同步的。 线程间的通信采用的是共享内存机制。(注:所有的共享内存块是在进程里建立的,线程只需链接上各自的共享内存块即可,每一块共享内存的大小是100). 在这里共享内存设置成一个100的数组。 具体实施:(1)为1.3.5.7.9建立一个共享内存1号,1.3.5.7.9生产者线程生产的产品都放入这块共享内存缓冲区,所有奇数的消费者线程要消费的话,只需在消费者线程中链接上这块共享内存,就可以直接消费1.3.5.7.9生产者线程生产的产品。 (2)为2.4.6.8.10建立一块共享内存2号。2.4.6.8.10生产的产品都放入2号共享内存缓冲区,所有的偶数的消费者线程只要链接上2号缓冲区,就可以消费2.4.6.8.10生产的产品。当偶数消费者线程消费产品后,产品即可从缓冲区撤销,方法是在消费线程里将消费的产品在共享内存数组里置0。 (3)为11--20的每一对生产者消费者线程建立一块共享内存,编号11--20. 11--20号的消费者线程能链接各自的共享内存缓冲区或奇数或偶数共享内存缓冲区,即11--20号的生产者生产的产品只能被对应的消费者消费而11-20的奇数消费者可以消费缓冲区1的产品,偶数消费者可消费缓冲区2的产品。 (4)为21--30号的生产者消费者线程只建立一块共享内存21号,21--30号生产者生产的产品都放入21号缓冲区,所有的消费者线程只要链接上21号共享内存,就可以消费21--30号生产者生产的产品。 用于控制线程是否结束的方法是:设置一个全局变量t,在生产者线程里进行t++,在生产者线程里当t达到10时(注:为了很好的测试程序,本应该在生产者生产30个产品时菜结束线程,这里设置成了10),就break跳出while()循环,这样线程自然就终止。同样在消费者线程里,当t达到10时,这里不用t++,就跳出while()循环,消费者线程自然就终止。这样设计满足了,当生产者生产30个产品时就终止生产者线程,生产者线程终止消费者线程也得终止的要求。 生产者从文件so.txt读取数据进行生产,这个文件里的数据是一连串的字符从a--z的组合,没有空格或其他字符。文件内容的格式没有特殊要求。

顾客价值分析模型

顾客价值分析模型 管研00 郑立明 摘要:在前人有关顾客价值研究的基础上,本文首次提出设计价值和顾客决策价值等新概念,区分顾客期望价值和顾客感知价值的不同含义,构建一个动态的顾客价值分析模型,并分析它所包含的基本关系。最后给出计算顾客感知价值的一个实例。 关键词:设计价值顾客决策价值顾客价值模型 1 顾客价值含义的简要回顾 P·Kotler(1994)提出顾客让渡价值(Customer Delivered Value),它指的是总顾客价值与总顾客成本之差。总顾客价值就是顾客从某一特定产品或服务中获得的一系列利益,它包括产品价值、服务价值、人员价值、形象价值;而总顾客成本是在评估、获得和使用该产品或服务时而引起的顾客预计费用,它包括货币成本、时间成本、体力成本、精力成本[1]。 …… 在前人研究的基础上,本文将提出“设计价值”和“顾客决策价值”两个新概念,并进一步分析和界定顾客价值的其他相关概念,据此建立起一个动态的顾客价值分析模型。 2 顾客价值分析中的一些基本概念 2.1 顾客期望价值(Customer Expecting Value,CEV) 顾客期望价值(CEV),反映顾客在特定的环境和时空条件下,对于某种产品或服务的主观需求状态,是一种有待实现和期待满足的需求量;或者指:在消费之前顾客对已经存在的某种产品或服务的预先感知的价值量,因而也可以是一种实在的估计值。 …… 当今的顾客比以往掌握更多的知识、信息与技能,也更热衷于学习与创新尝试,在日趋宽泛的产品选择中享有愈来愈多的主动权,随着交易的重复和消费经验的积累,顾客对于产品和服务的期望价值也越来越高。因此,如顾客价值模型所示,顾客期望价值曲线(CEV)在长期中呈逐渐上升之势。 2.2 设计价值(Designed Value,DV) 本文认为,在顾客价值分析中,有两个最重要的概念:设计价值和顾客感知价值。 设计价值(DV),是在产品或服务供应商的构想中将要提供给顾客的一种效用或价值,或者指供应商根据前期的研发设计已经制造出来的但还需要通过市场传递给消费者的一种效用或价值(即一种还没有实现的价值)。这是从供应厂商角度给出的一种衡量,因此可以看成是一种目的在于满足顾客期望价值的计划供给量或潜在供给量。 …… 2.3 顾客感知价值(Customer Perceived Value,CPV) 顾客感知价值(CPV),也称顾客感知收益,或顾客感知利得,它指顾客在交易中或通过消费实际感觉到的物质收益和精神收益的总和,因此也是一种主观的感受,一个事后的综合评价量。它反映顾客对于包含着质量、品种、价格、服务、信誉、速度等要素的产品或服务的综合满意程度[5~7]。 。。。。。。 3 顾客价值分析模型及其内涵 在明晰以上几个基本概念基础上,本文提出一个动态的顾客价值分析模型(得自张中科的“成本、价格和客户价值的动态关系”图形的启发[9])。选取两个时刻T1和T2,来分析顾客价值发展变化的情况。为便于理解和直观比较,顾客决策价值(DCV)在图形中有一个时间提前量。

操作系统生产者和消费者问题

生产者-消费者问题是一个经典的进程同步问题,已经属于化石级别的了。该问题最早由Dijkstra 提出,用以演示他提出的信号量机制。要求设计在同一个进程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。 要求设计并实现一个进程,该进程拥有一个生产者线程和一个消费者线程,它们使用N个不同的缓冲区(N为一个自定义的确定的数值,例如N=32)。需要使用如下信号量: ?一个互斥信号量,用以阻止生产者线程和消费者线程同时操作缓冲区列表; ?一个信号量,当生产者线程生产出一个物品时可以用它向消费者线程发出信号; ?一个信号量,消费者线程释放出一个空缓冲区时可以用它向生产者线程发出信号; 看代码吧:

sem_t full_sem;/*同步信号量,当没产品时阻止消费者消费*/ pthread_mutex_t mutex;/*互斥信号量,一次只有一个线程访问缓冲*/ /* *output the buffer */ void print() { int i; for(i = 0; i < M; i++) printf("%d ", buff[i]); printf("\n"); } /* *producer */ void*producer() { for(;;) { sleep(1); P(empty_sem); pthread_mutex_lock(&mutex); in = in % M; printf("(+)produce a product. buffer:");

生产者消费者问题设计与实现

操作系统课程设计任务书 学院计算机与信息工程专业计算机科学与技术课程名称操作系统题目生产者消费者问题设计 与实现 完成期限自2015年6月23日至2015年6月29日共1周 内容及任务一、项目的目的 1.理生产者消费者问题基本概念和工作原理,以及实现技术; 2.理解并掌握生产者消费者问题相关算法,以及它的实现方法; 3.掌握在eclipse环境下,系统开发的基本步骤和方法; 4.掌握在eclipse环境下,设计和开发一个简单的生产者消费者问题系统来模拟操作系统中生产者消费者问题。 二、项目任务的主要内容和要求 1.精读并理解和掌握生产者消费者问题; 2.编写程序来模拟生产者消费者问题的实现; 3.编写应用程序测试生产者消费者问题,并显示结果。 三、项目设计(研究)思路 本课程设计的基本思路是,首先理解和掌握生产者消费者问题的基本思想和原理,然后根据理解的基本思想和原理编程实现生产者消费者问题,最后通过数据分析生产者消费者问题。 四、具体成果形式和要求 成果:生产者消费者问题程序语言实现;设计说明书。 要求:编写好的生产者消费者问题程序能够正确启动运行;设计说明书规范、合理。 进度安排 起止日期工作内容2015.6.23至2015.6.24熟悉相关内容 2015.6.25至2015.6.26 系统设计和实现 2015.6.27至2015.6.29 系统实现和撰写相关文档

主要参考资料1.《计算机操作系统》汤子瀛哲凤屏汤小丹主编西安电子科技大学出版社. 2.《计算机操作系统概论》陈宏杨忠耀主编重庆邮电大学出版社. 3.《计算机操作系统基本知识》廖成崔阳主编电子工业出版社. 4.《操作系统实现与设计》陆刚望能主编电子工业出版社. 5.《java程序语言设计》丁振凡主编,薛清华副主编清华大学出版社. 指导教师 意见 (签字):年月日 系(教研室) 主任意见 (签字):年月日

生产者与消费者实验报告

生产者和消费者实验报告 【实验目的】 1.加深对进程概念的理解,明确进程和程序的区别。 2.进一步认识并发执行的实质。 3.验证用信号量机制实现进程互斥的方法。 4.验证用信号量机制实现进程同步的方法。 【实验要求】 用c语言编程搭建“生产者和消费者”经典进程通信问题的环境。要求程序运行时,按任意键停止,显示当前系统的各个参数的值。提交实验报告,以及相关程序列表。打包成附件上传。 【实验环境】 Visual C++6.0 【实验内容】 1.了解经典同步问题“生产者和消费者” 生产者与消费者可以通过一个环形缓冲池联系起来,环形缓冲池由几个大小相等的缓冲块组成,每个缓冲块容纳一个产品。每个生产者可不断地每次往缓冲池中送一个生产产品,而每个消费者则可不断地每次从缓冲池中取出一个产品。指针i和指针j分别指出当前的第一个空缓冲块和第一个满缓冲块。 2.分析和理解 (1)既存在合作同步问题,也存在临界区互斥问题 合作同步:当缓冲池全满时,表示供过于求,生产者必须等待,同时唤醒消费者;当缓冲池全空时,表示供不应求,消费者应等待,同时唤醒生产者。 互斥:缓冲池显然是临界资源,所在生产者与消费都要使用它,而且都要改变它的状态。 (2)基于环形缓冲区的生产者与消费者关系形式描述: 公用信号量mutex:初值为1,用于实现临界区互斥 生产者私用信号量empty:初值为n,指示空缓冲块数目 消费者私用信号量full:初值为0,指示满缓冲块数目 整型量i和j初值为0,i指示首空缓冲块序号,j指示首满缓冲块序号 (3)PV原语 var mutex,empty,full:semaphore; i,j:integer;buffer:array[0...n-1] of item; i:=j:=1; Procedure producer; begin while true do begin

操作系统生产者与消费者问题实验报告

《操作系统》实验报告 生产者和消费者的问题 一、实验目的 1.掌握基本的同步与互斥的算法,理解基本的生产者与消费者的模型。 2.学习使用Windows 2000/XP中基本的同步对象,掌握相关的API的使用方法。 3.了解Windows 2000/XP中多线程的并发执行机制,线程间的同步和互斥。 二、实验的内容及其要求 1.实验内容 以生产者/消费者模型为根据,在Windows 2000环境下创建一个控制台进程,在改进程中创建n个线程模拟生产者和消费者,实现进程(线程)的同步与互斥。 2.实验要求 ①学习并理解生产者/消费者模型及其同步/互斥规则 ②学习了解Windows同步对象及其特性 ③熟悉实验环境,掌握相关API的使用方法 ④设计程序,实现生产者/消费者进程(线程)的同步与互斥 ⑤提交实验报告 三、实验的时间安排 1.实验前,先到图书馆或上网百度了解有关生产者/消费者模型的相关知识,建立生产者/消费者模型的基本概念。 2.利用13周、15周、17周的上机时间编写和调试程序代码。 3.利用其他课余时间来分析实验的最终结果并完成相关的实验报告。 四、实验的环境 1.硬件条件:普通计算机一台 2.软件条件:①操作系统:Windows 2000/XP ②开发语言:VC++ 本实验是在Windows 2000+VC6.0环境下实现的,利用Windows SDK提供的系统接口(API)完成程序的功能。实验在Windows下安装VC后进行,因为VC是一个集成开发环境,其中包含了Windows SDK所有工具和定义,所以安装了VC后就不用特意安装SDK了。实验中所用的API(应用程序接口),是操作系统提供的用来进行应用程序设计的系统功能接口。要使用这些API,需要包含对这些函数进行说明的SDK 头文件,最常见的就是windows.h。一些特殊的API调用还需要包含其他的头文件。 五、正文 1.程序结构图:

生产者与消费者问题(附源码)

操作系统实验报告 专业网络工程班级08102 学号姓名 课程名称操作系统学年2010-2011 学期下 课程类别专业必修■限选□任选□实践□实验时间2010年11月3日 实验名称 实验一:生产者与消费者问题 实验目的和要求 全面理解生产者与消费者问题模型,掌握解决该问题的算法思想,正确使用同步机制。 实验软硬件要求 Pentium ||| 450以上CPU 64MB以上内存 WINDOWS XP Visual C++6.0 实验内容、方法和步骤(可附页) 问题描述:一组生产者向一组消费者提供商品,共享一个有界缓冲池,生产者向其中放入商品,消费者从中取得商品。假定这些生产者和消费者互相等效,只要缓冲池未满,生产者可将商品送入缓冲池;只要缓冲池未空,消费者可从缓冲池取走一商品。 功能要求:根据进程同步机制,编写一个解决上述问题的程序,可显示缓冲池状态、放商品、取商品等过程。 具体参数:3个生产者进程,2个消费者进程; 缓冲区单元个数N=4; 在本程序中是缓冲区中的数从0变为1表示模拟生产一个产品,消费时则将对应缓冲区内的1变为0,为模拟消费一个产品。 实验结果(可附页) 见截图 小结 这次多线程的操作系统实验,使我对线程的概念以及多线程程序中线程间的运行有了更深的认识,同时也让我的编程能力得到了一定的提高。 这次做的用多线程实现生产者与消费者模型的实验,由于我的编程能力基础比较差,对线程也是一无所知,所以一开始觉得无从下手,但幸好老师给了充足的时间,我通过看网上找的视频资料以及请教同学才渐渐地有了一点概念,然后我试着从网上下了一些多线程的程序分析里面的语句,基本弄懂了多线程的原理。 评定成绩:批阅教师:年月日

消费者行为分析模型知识讲解

消费者行为分析模型

消费者行为模型的演变 AIDMA,是1920年代美国营销广告专家山姆·罗兰·霍尔(Samuel Roland Hall)在其著作中阐述广告宣传对消费者心理过程缩写。该理论认为,消费者从接触到信息到最后达成购买,会经历这5个阶段: A:Attention(引起注意)——花哨的名片、提包上绣着广告词等被经常采用的引起注意的方法 I:Interest (引起兴趣)——一般使用的方法是精制的彩色目录、有关商品的新闻简报加以剪贴。 D:Desire(唤起欲望)——推销茶叶的要随时准备茶具,给顾客沏上一杯香气扑鼻的浓茶,顾客一品茶香体会茶的美味,就会产生购买欲。推销房子的,要带顾客参观房子。餐馆的入口处要陈列色香味具全的精制样品,让顾客倍感商品的魅力,就能唤起他的购买欲。 M:Memory(留下记忆)——一位成功的推销员说:“每次我在宣传自己公司的产品时,总是拿着别公司的产品目录,一一加以详细说明比较。因为如果总是说自己的产品有多好多好,顾客对你不相信。反而想多了解一下其他公司的产品,而如果你先提出其他公司的产品,顾客反而会认定你自己的产品。” A:Action(购买行动)——从引起注意到付诸购买的整个销售过程,推销员必须始终信心十足。过分自信也会引起顾客的反感,以为你在说大话、吹牛皮,从而不信任你的话。 AISAS模型是由电通公司针对互联网与无线应用时代消费者生活的变 化,于2005年提出的一种全新的消费者行为分析模型。电通公司注意到目前营销方式正从传统的AIDMA营销法则逐渐向含有网络特质的AISAS发展。理论模型如下: A:Attention(引起注意):顾客从互联网的各个角落看到我们的信息,从而引起他们的注意。 I:Interest(提起兴趣):这个阶段顾客可能从我们的信息中发掘到了他需求的东西从而提起了对我们信息的兴趣。 S:Search(信息搜寻):顾客对我们的信息或者产品提起了兴趣,那么他就会从他熟知的互联网各个角度去分析对比相关信息。 A:Action(购买行动):通过了上个层次的分析对比客户最终作出了购买决定。 S:Share(与人分享):客户购买后通常会在互联网上进行分享,比如:微博,博客,SNS等等。

相关文档
最新文档