生产者消费者实验报告.答案

生产者消费者实验报告.答案
生产者消费者实验报告.答案

南昌大学实验报告

学生姓名:倪焕学号:8000114018 专业班级:软件工程141班

实验类型:■验证□综合□设计□创新实验日期:2016.5.24 实验成绩:

一、实验项目名称

哲学家就餐问题

二、实验目的

利用PV操作解决生产者消费者问题

三、软硬件环境

软件:Visual Studio2010

硬件:PC机一台

四、实验内容结果

一、实现代码 3个生产者1个消费者,生产者会等待消费者

#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]; //各线程的handle

DWORD producerID[CONSUMERS_COUNT]; //生产者线程的标识符

DWORD consumerID[THREADS_COUNT]; //消费者线程的标识符

//创建生产者线程

for (int i=0;i

hThreads[i]=CreateThread(NULL,0,Producer,NULL,0,&producerID[i]);

if (hThreads[i]==NULL) return -1;

}

//创建消费者线程

for (int i=0;i

hThreads[PRODUCERS_COUNT+i]=CreateThread(NULL,0,Consumer,NULL,0,&consumerID[i]); if (hThreads[i]==NULL) return -1;

}

while(g_continue){

if(getchar()){ //按回车后终止程序运行

g_continue = false;

}

}

return 0;

}

//生产一个产品。简单模拟了一下,仅输出新产品的ID号

void Produce()

{

std::cerr << "Producing " << ++ProductID << " ... ";

std::cerr << "Succeed" << std::endl;

}

//把新生产的产品放入缓冲区

void Append()

{

std::cerr << "Appending a product ... ";

g_buffer[in] = ProductID;

in = (in+1)%SIZE_OF_BUFFER;

std::cerr << "Succeed" << std::endl;

//输出缓冲区当前的状态

for (int i=0;i

std::cout << i <<": " << g_buffer[i];

if (i==in) std::cout << " <-- 生产";

if (i==out) std::cout << " <-- 消费";

std::cout << std::endl;

}

}

//从缓冲区中取出一个产品

void Take()

{

std::cerr << "Taking a product ... ";

ConsumeID = g_buffer[out];

out = (out+1)%SIZE_OF_BUFFER;

std::cerr << "Succeed" << std::endl;

//输出缓冲区当前的状态

for (int i=0;i

std::cout << i <<": " << g_buffer[i];

if (i==in) std::cout << " <-- 生产";

if (i==out) std::cout << " <-- 消费";

std::cout << std::endl;

}

}

//消耗一个产品

void Consume()

{

std::cerr << "Consuming " << ConsumeID << " ... "; std::cerr << "Succeed" << std::endl;

}

//生产者

DWORD WINAPI Producer(LPVOID lpPara)

{

while(g_continue){

WaitForSingleObject(g_hFullSemaphore,INFINITE); WaitForSingleObject(g_hMutex,INFINITE);

Produce();

Append();

Sleep(1500);

ReleaseMutex(g_hMutex);

ReleaseSemaphore(g_hEmptySemaphore,1,NULL);

}

return 0;

}

//消费者

DWORD WINAPI Consumer(LPVOID lpPara)

{

while(g_continue){

WaitForSingleObject(g_hEmptySemaphore,INFINITE); WaitForSingleObject(g_hMutex,INFINITE);

Take();

Consume();

Sleep(1500);

ReleaseMutex(g_hMutex);

ReleaseSemaphore(g_hFullSemaphore,1,NULL);

}

return 0;

}

二、实现代码一个生产者一个消费者

/* 用信号量解决生产者-消费者问题 */

#include

#define N 10

typedef int semaphore; /* 信号量是一种特殊的整型变量 */

semaphore mutex=1; /* 互斥访问 */

semaphore empty=N; /* 记录缓冲区中空的槽数 */

semaphore full=0; /* 记录缓冲区中满的槽数*/

semaphore buf[N]; /* 有N个槽数的缓冲区buf[N],并实现循环缓冲队列 */ semaphore front=0, rear=0;

void p(semaphore *x) /* p操作 */

{

*x=(*x)-1;

}

void v(semaphore *y) /* v操作 */

{

*y=(*y)+1;

}

void produce_item(int *item_ptr)

{

/*printf("produce an item\n");*/

*item_ptr='m'; /* 'm' is "man满" */

}

void enter_item(int x)

{

front=(front+1)%N;

buf[front]=x;

printf("enter_item %c to buf[%d]\n", buf[front], front);

}

void remove_item(int *yy)

{

rear=(rear+1)%N;

printf("remove_item %c from buf[%d]", buf[rear], rear);

*yy=buf[rear];

buf[rear]='k'; /* 'k' is "kong空" */

printf(" so the buf[%d] changed to empty--%c\n", rear, buf[rear]); }

void consume_item(int y)

{

printf("cosume the item :the screem print %c\n", y);

}

void producer(void);

void consumer(void);

/* 生产者 */

void producer(void)

{

int item;

while(1){

produce_item(&item);

p(&empty); /* 递减空槽数 */

p(&mutex); /* 进入临界区 */

enter_item(item); /* 将一个新的数据项放入缓冲区 */

v(&mutex); /* 离开临界区 */

v(&full); /* 递增满槽数 */

if(full==N) /* 若缓冲区满的话,唤醒消费者进程 */

consumer();

}

}

/* 消费者 */

void consumer(void)

{

int get_item;

while(1){

p(&full); /* 递减满槽数 */

p(&mutex); /* 进入临界区 */

remove_item(&get_item); /* 从缓冲区中取走一个数据项 */

v(&mutex); /* 离开临界区 */

v(&empty); /* 递增空槽数 */

consume_item(get_item); /* 对数据项进行操作(消费)*/

if(empty==N) /* 若缓冲区全空的话,唤生产者进程 */

producer();

}

}

/* 调用生产者-消费者进程实现进程间同步 */ int main()

{

producer();

return 0;

}

五、实验体会

通过本次实验,对于生产者和消费者问题有了更加明确的理解,生产者和消费者共享一个商品缓存,互相唤醒,通过缓存区的满空来进行状态的判定,他们通过PV操作,进行交互同步工作。通过创建不断创建新的线程,来展现两者的问题。

实验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

大学物理化学实验报告---液体饱和蒸汽压的测定

纯液体饱和蒸汽压的测量 目的要求 一、 明确纯液体饱和蒸气压的定义和汽液两相平衡的概念,深入了解纯液体饱 和蒸气压与温度的关系公式——克劳修斯-克拉贝龙方程式。 二、 用数字式真空计测量不同温度下环己烷的饱和蒸气压。初步掌握真空实验 技术。 三、 学会用图解法求被测液体在实验温度范围内的平均摩尔气化热与正常沸 点。 实验原理 通常温度下(距离临界温度较远时),纯液体与其蒸气达平衡时的蒸气压称为该温度下液体的饱和蒸气压,简称为蒸气压。蒸发1mol 液体所吸收的热量称为该温度下液体的摩尔气化热。 液体的蒸气压随温度而变化,温度升高时,蒸气压增大;温度降低时,蒸气压降低,这主要与分子的动能有关。当蒸气压等于外界压力时,液体便沸腾,此时的温度称为沸点,外压不同时,液体沸点将相应改变,当外压为1atm (101.325kPa )时,液体的沸点称为该液体的正常沸点。 液体的饱和蒸气压与温度的关系用克劳修斯-克拉贝龙方程式表示: 2 m vap d ln d RT H T p ?= (1) 式中,R 为摩尔气体常数;T 为热力学温度;Δvap H m 为在温度T 时纯液体的摩尔 气化热。 假定Δvap H m 与温度无关,或因温度范围较小,Δvap H m 可以近似作为常数,积分上式,得: C T R H p +??-=1 ln m vap (2) 其中C 为积分常数。由此式可以看出,以ln p 对1/T 作图,应为一直线,直线的斜率为 R H m vap ?- ,由斜率可求算液体的Δvap H m 。 静态法测定液体饱和蒸气压,是指在某一温度下,直接测量饱和蒸气压,此 法一般适用于蒸气压比较大的液体。静态法测量不同温度下纯液体饱和蒸气压,有升温法和降温法二种。本次实验采用升温法测定不同温度下纯液体的饱和蒸气压,所用仪器是纯液体饱和蒸气压测定装置,如图1所示: 平衡管由A 球和U 型管B 、C 组成。平衡管上接一冷凝管,以橡皮管与压

液体饱和蒸气压的测定_物化实验报告

物理化学实验(B) 实验报告 【实验名称】B.5 液体饱和蒸气压的测定 【】J.N 【班级】第4小组 【学号】 【组编号】5号 【实验日期】2015年5月11日 【室温】24.1 ℃ 【大气压】100.11 kPa 【摘要】 本实验通过静态法测得CCl4的lg(p pθ )与T的关系为 lg(p p )=?1709.9 T +4.9078,平均摩尔汽化热为3.274×104 J?mol?1, 气化熵为93.87 J?mol?1?K?1。通过动态法测得水的lg(p p ) 与T的关系为lg(p pθ)=?2078.7 T +5.5792,平均摩尔汽化热为3.980× 104 J?mol?1,气化熵为106.7 J?mol?1?K?1。温度读数的不准确对实验的误差极小,实验误差的主要是由于静态法中肉眼判断液面平衡的不准确性以及动态法中金属测温探头在沸腾过程中并非一端位于液面下一端位于液面上等因素所引起的。

一、实验部分 1.主要仪器药品和设备 1.1 主要药品 CCl4、二次水等 1.2 主要仪器 数字式温度-压力测定仪,循环水流泵,1/10刻度温度计,电磁搅拌器,电加热器,两口圆底烧瓶,真空缓冲瓶,安全瓶,直形冷凝管,搅拌磁子,真空脂,冷凝水循环系统 2.实验步骤 2.1 静态法测定饱和蒸气压 2.1.1 仪器装置 1-盛水大烧杯, 2-温度计,3-搅拌, 4-平衡管,5-冷凝管, 6-开口U型水银压 力计,7-缓冲瓶,8- 进气活塞,9-抽气活 塞,10-放空活塞, 11-安全瓶,12、13- 橡皮管,14-三通活 塞。 实际仪器略有 差异,压力温度数值 从温度-压力测定仪 中读出。 平衡管中加入 CCL4至容量的2/3. 2.1.2 检验气密性 打开油泵,再开缓冲瓶上连接油泵的活塞,使体系压力减少50 kPa。关闭活塞,若5 min压强变化少于0.3 kPa,则装置气密性良好。 2.1.3 测大气压下沸点 使体系与大气相通,水浴加热至78 ℃,停止加热不断搅拌。当b、c液面达到同一水平时,立即记下此时的温度和大气压力。重复测定,若连续两次测定沸点差小于0.05 ℃,则空气已排净,此时温度即为大气压下沸点。 2.1.4 测定不同压强下沸点 关闭通往大气的活塞。先开由泵,再开连油泵的活塞,使体系减压约6.7 kPa。关闭接油泵活塞,搅拌,至b、c液面达到同一水平时,立即记下此时的温度和大气压力。继续减压,测定其沸点。至压力差为50 kPa,结束实验,读大气压力。2.1.5 整理仪器 打开所有活塞,关闭搅拌器、温度-压力测定仪、冷凝水进出口及油泵开关,

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

操作系统课程设计 一.实验目标 完成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的组合,没有空格或其他字符。文件内容的格式没有特殊要求。

物理化学实验报告.

《大学化学基础实验2》实验报告 课程:物理化学实验 专业:环境科学 班级: 学号: 学生姓名:邓丁 指导教师:谭蕾 实验日期:5月24日

实验一、溶解焓的测定 一、实验名称:溶解焓的测定。 二、目的要求:(1)学会用量热法测定盐类的积分溶解焓。 (2)掌握作图外推法求真实温差的方法。 三、基本原理: 盐类的溶解通常包含两个同时进行的过程:一是晶格的破坏,为吸热过程;二是离子的溶剂化,即离子的水合作用,为放热过程。溶解焓则是这两个过程热效应的总和,因此,盐类的溶解过程最终是吸热还是放热,是由这两个热效应的相应大小所决定的。影响溶解焓的主要因素有温度、压力、溶质的性质以及用量等。热平衡式: △sol H m=-[(m1C1+m2C2)+C]△TM/m2 式中, sol H m 为盐在溶液温度及浓度下的积分溶解焓, J·mol , m1 , m2 分别为水和溶质的质量, M 为溶质的摩尔质量,kg·mol -1 ;C1 ,C 2 分别为溶剂水, kg; 溶质的比热容,J·kg -1;T 为溶解过程中的真实温差,K;C 为量热计的热容, J·K- 1 ,也称热量计常数.本实验通过测定已知积分溶解焓的标准物质 KCl 的 T ,标定出量热计热容 C 的值. 四、实验主要仪器名称: NDRH-2S型溶解焓测定实验装置1套(包括数字式温度温差测量仪1台、300mL简单量热计1只、电磁搅拌器1台);250mL容量瓶1个;秒表1快;电子 ;蒸馏水 天平1台;KCl;KNO 3 五、实验步骤: (1)量热计热容 C 的测定 ( 1 ) 将仪器打开 , 预热 . 准确称量 5.147g 研磨好的 KCl , 待用 . n KCl : n水 = 1: 200 (2)在干净并干燥的量热计中准确放入 250mL 温室下的蒸馏水,然后将温度传感器的探头插入量热计的液体中.打开搅拌器开关,保持一定的搅拌速度,待温差变化基本稳定后,读取水的温度 T1 ,作为基温. (3)同时, 每隔30s就记录一次温差值,连续记录8 次后, 将称量好的 5.174g KCl 经漏斗全部迅速倒入量热计中,盖好.10s记录一次温度值,至温度基本稳定不变,再每隔 30s记录一次温度的数值,记录 8 次即可停止. (4)测出量热计中溶液的温度,记作 T2 .计算 T1 , T2 平均值,作为体系的温度.倒出溶液,取出搅拌子,用蒸馏水洗净量热计. KNO3 熔解热的测定:标准称量 3.513g KNO3 ,代替 KCl 重复上述操作.

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

《操作系统》实验报告 生产者和消费者的问题 一、实验目的 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.程序结构图:

物理化学实验报告-溶解热的测定

物理化学实验报告 溶解热的测定 实验时间:2018年4月日 姓名:刘双 班级: 学号: 1.实验目的 (1)了解电热补偿法测量热效应的基本原理。 (2)用电热补偿法测定硝酸钾在水中的积分溶解热,通过计算或者作图求出硝酸钾在水中的微分溶解热、积分冲淡热和微分冲淡热。 (3)掌握微机采集数据、处理数据的实验方法和实验技术。 2.实验原理 物质溶解于溶剂过程的热效应称为溶解热,物质溶解过程包括晶体点阵的破坏、离子或分子的溶剂化、分子电离(对电解质而言)等过程,这些过程热效应的代数和就是溶解过程的热效应,溶解热包括积分(或变浓)溶解热和微分(或定浓)溶解热。把溶剂加到溶液中使之稀释,其热效应称为冲淡热。包括积分(或变浓)冲淡热和微分(或定浓)冲淡热。 溶解热Q:在恒温、恒压下,物质的量为n2的溶质溶于物质的量为n1的溶剂(或溶于某浓度的溶液)中产生的热效应。 积分溶解热Qs:在恒温、恒压下,1mol溶质溶于物质的量为n1的溶剂中产生的热效应。 微分溶解热(eQ en2)n 1 :在恒温、恒压下,1mol溶质溶于某一确定浓度的无限量的溶液中 的热效应。 冲淡热:在恒温、恒压下,物质的量为n1的溶剂加入到某浓度的溶液中产生的热效应。 积分冲淡热Q d:在恒温、恒压下,把原含1mol溶质和n02mol溶剂的溶液冲淡到含溶剂为n01mol时的热效应,为某两浓度的积分溶解热之差。 微分冲淡热eQ en1n 2或eQ S en0n 2 :在恒温、恒压下,1mol溶剂加入到某一确定浓度的无限 量的溶液中产生的热效应。 它们之间的关系可表示为:

dQ=eQ 1n 2 dn1+ eQ 2n 1 dn2 上式在比值n1 n2 恒定下积分,得: Q=eQ en1 n2 n1+ eQ en2 n1 n2 Q n2=Q s,令:n1 n2 =n0,则有: ?Q ?n1 = ?(n2Q s ?n2n0 =( ?Q s ?n0 ) Q d=Q s n01?Q s n02 其中积分溶解热Q s可以直接由实验测定,其他三种可以由Q s?n0曲线求得。 欲求溶解过程中的各种热效应,应先测量各种浓度下的的积分溶解热。可采用累加的方法,先在纯溶剂中加入溶质,测出热效应,然后再这溶液中再加入溶质,测出热效应,根据先后加入的溶质的总量可计算出n0,而各次热效应总和即为该浓度下的溶解热。本实验测量硝酸钾溶解在水中的溶解热,是一个溶解过程中温度随反应的进行而降低的吸热反应,故采用电热补偿法测定。先测定体系的初始温度T,当反应进行后温度不断降低时,由电加热法使体系复原到起始温度,根据所耗电能求出热效应Q。 3.仪器和试剂 反应热测量数据采集接口装置: NDRH-1型,温度测量范围0~40℃,温度测量分辨率0.001℃,电压测量范围0~20V,电压测量分辨率0.01V,电流测量范围0~2A,电流测量分辨率0.01A。 精密稳流电源:YP-2B型。 微机、打印机。 量热计(包括杜瓦瓶,搅拌器,加热器,搅拌子)。 称量瓶8只,毛笔,研钵。 硝酸钾(A.R.) 4.实验操作 (1)取8个称量瓶,分别编号。 (2)取KNO3于研钵中,研磨充分。 (3)分别称量约 2.5、1.5、2.5、3.0、3.5、4.0、4.0、4.5g 研磨后的硝酸钾,放入 8 个称量瓶中,并精确称量瓶子与药品的总质量。记录下所称量的数据。 (4)使用0.1g精度的天平称量216.2g的去离子水,放入杜瓦瓶中,将杜瓦瓶放在磁力搅

生产者与消费者实验报告

生产者和消费者实验报告 【实验目的】 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

大学物理化学实验报告-络合物的磁化率的测定

物理化学实验报告 院系化学化工学院 班级化学 061 学号 13 姓名沈建明

实验名称 络合物的磁化率的测定 日期 同组者姓名 史黄亮 室温 ℃ 气压 kPa 成绩 一、目的和要求 1、掌握古埃(Gouy )法磁天平测定物质磁化率的基本原理和实验方法; 2、通过对一些络合物的磁化率测定,推算其不成对电子数,判断这些分子的配键类型 二、基本原理 物质的磁性一般可分为三种: 顺磁性, 反磁性和铁磁性。 a .反磁性是指磁化方向和外磁场方向相反时所产生的磁效应。反磁物质的χD < 0(电子的拉摩进动产生一个与外磁场方向相反的诱导磁矩,导致物质具有反磁性)。 b. 顺磁性是指磁化方向和外磁场方向相同时所产生的磁效应,顺磁物质的 Xp > 0。(外磁场作用下,粒子如原子、分子、离子,中固有磁矩产生的磁效应)。 c. 铁磁性是指在低外磁场中就能达到饱和磁化,去掉外磁场时,磁性并不消失,呈现出滞后现象等一些特殊的磁效应。 d. 摩尔磁化率: 古埃法测定物质的摩尔磁化率( )的原理 通过测定物质在不均匀磁场中受到的力,求出物质的磁化率 。 把样品装于园形样品管中,悬于两磁极中间,一端位于磁极间磁场强度最大区域 H ,而另一端位于磁场强度很弱的区域 H 0,则样品在沿样品管方向所受的力F 可表示为: M χH F mH Z χ?=?P P D M χχχχ≈+=

其中:m 为样品质量,H 为磁场强度, 为沿样品管方向的磁场梯度。 本实验用摩尔氏盐(六水合硫酸亚铁铵)标定外磁场强度H 。测定亚铁氰化钾 和硫酸亚铁的摩尔磁化率,求金属离子的磁矩并考察电子配对状况。 三、仪器、试剂 MB-1A 磁天平(包括电磁铁,电光天平,励磁电源) 1套 软质玻璃样品管 1只 角匙 1只 漏斗 1只 莫尔氏盐(NH 4)2SO 4·FeSO 4·6H 2O (分析纯) FeSO 4·7H 2O (分析纯) K 4Fe(CN)6·3H 2O (分析纯) 四、实验步骤 1. 磁场强度(H )的测定 : 用已知摩尔磁化率的莫尔氏盐标定某一固定励磁电流时的磁场强度(H ).励磁电流变化0A →3A →→4A →→3A →0A ,分别测定励磁电流在各值下的天平的读数(4A 的值可以不读,持续2分钟左右,消磁),用同一仪器在同等条件下进行后续的测定。 具体操作如下: (1)把样品管悬于磁场的中心位置,测定空管在加励磁电流前,后磁场中的重 量。求出空管在加磁场前,后的重量变化管 ,重复测定三次读数,取平均值。 (2)把已经研细的莫尔氏盐通过小漏斗装入样品管,样品高度约为8m (此时样 品另一端位于磁场强度H=0处)。读出样品的高度,要注意样品研磨细小,装样均匀不能有断层。测定莫尔氏盐在加励磁电流前,后磁场中的重量。求出在加磁场前后的重量变化样品+管,重复测定三次读数,取平均值。 2.样品的莫尔磁化率测定: 把测定过莫尔氏盐的试管擦洗干净,把待测样品 ,分别装在样品管中,按着上述步骤(1) ,(2)分别测定在加磁场前,后的重量。求出重量的变化(管和样品+管),重复测定三次读数,取 H Z ??[]462()3K Fe CN H O ?4 2 7FeSO H O ?

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

1实验1:生产者消费者问 题 -标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

福建农林大学金山学院实验报告 系(教研室):专业:计算机科学与技术年级: 实验课程:生产者与消费者实验姓名:学号: 实验室号: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;

物理化学实验报告-BZ振荡反应

物理化学实验报告 BZ 振荡反应 1.实验报告 (1)了解BZ 反应的基本原理。 (2)观察化学振荡现象。 (3)练习用微机处理实验数据和作图。 2. 实验原理 化学振荡:反应系统中某些物理量随时间作周期性的变化。 BZ 体系是指由溴酸盐,有机物在酸性介质中,在有(或无)金属离子催化剂作用下构成的体系。有苏联科学家Belousov 发现,后经Zhabotinski 发现而得名。 本实验以 +4 ~ CH 2(COOH)2 ~ H 2SO 4作为反映体系。该体系的总反应为: 体系中存在着下面的反应过程。 过程A : 2 3 过程B : 4 5 6 Br - 的再生过程: 当[Br - ]足够高时,主要发生过程A ,2反应是速率控制步骤。研究表明,当达到准定态 当[Br -]低时,发生过程B ,Ce +3 被氧化。4反应是速率控制步骤。4.5反应将自催化产生HBrO 2

可以看出:Br - 和 HbrO 2的。当K 3 [Br - ]>K 4时,自催化过程不可能发生。自催化是BZ 振荡反应中必不可少的步骤,否则该振荡不能发生。研究表明,Br - 的临界浓度为: 若已知实验的初始浓度,可由上式估算[Br - ]crit 。 体系中存在着两个受溴离子浓度控制的过程A 和过程B ,当[Br - ]高于临界浓度[Br - ]crit 时发生过程A ,当[Br - ]低于[Br -]crit 时发生过程B 。[Br - ]起着开关的作用,他控制着A,B 之间的变化。这样体系就在过程A 、过程B 间往复振荡。 在反应进行时,系统中[Br - ]、[HbrO 2]、[Ce +3 ]、[Ce +4 ]都随时间作周期性的变化,实验中,可以用溴离子选择电极测定[Br - ],用铂丝电极测定[Ce +4 ]、[Ce +3 ]随时间变化的曲线。溶液的颜色在黄色和无色之间振荡,若再加入适量的FeSO 4邻菲咯啉溶液,溶液的颜色将在蓝色和红色之间振荡。 从加入硫酸铈铵到开始振荡的时间为t 诱 ,诱导期与反应速率成反比。 即 并得到 本实验使用的BZ 反应数据采集接口系统,并与微型计算机相连。通过接口系统测定电极的电势信号,经通讯口传送到PC 。自动采集处理数据。 3.实验仪器与试剂 BZ 反应数据采集接口系统 恒温槽 溴酸钾0.25 mol ·dm -3 磁力搅拌器 硫酸3.00 mol ·dm -3 丙二酸0.45mol ·dm -3 硫酸铈铵4×10-3 mol ·dm -3 微型计算机 反应器 4.实验步骤

凝固点-物化实验报告

实验7 凝固点降低法测定摩尔质量 姓名:憨家豪;学号:2012012026;班级:材23班;同组实验人员:赵晓慧 实验日期:2014-3-8;提交报告日期:2014-3-15 带实验的助教姓名:袁斌 1. 引言 1.1 实验目的 1.用凝固点降低法测定尿素的摩尔质量。 2.学会用步冷曲线对溶液凝固点进行校正。 3.通过本实验加深对稀溶液依数性的认识。 1.2 实验原理 稀溶液具有依数性,凝固点降低是依数性的一种表现,它与溶液质量摩尔浓度的关系为: *×f f f f B T T T K b ?=-= 式中:f T ?为凝固点降低值,* f T 、f T 分别为纯溶剂、溶液的凝固点,B b 为溶液质量摩尔浓度,f K 为凝固点降低常数,它只与所用溶剂的特性有关。如果稀溶液是由质量为B m 的溶质溶于质量为A m 的溶剂中而构成,则上式可写为: 1000× ×B f f A m T K M m ?= 即 310B f f A m M K T m =? 式中: f K 为溶剂的凝固点降低常数(单位为K ·kg ·mol -1 );M 为溶质的摩尔质量(单位为g ·mol -1 )。 如果已知溶液的f K 值,则可通过实验测出溶液的凝固点降低值 f T ?,利用上式即可求出溶质的摩尔质量。 常用溶剂的f K 值见下表1。 表1 常用溶剂的f K 值

实验中,要测量溶剂和溶液的凝固点之差。对于纯溶剂如图1所示,将溶剂逐渐降低至过冷(由于新相形成需要一定的能量,故结晶并不析出),温度降低至一定值时出现结晶,当晶体生成时,放出的热量使体系温度回升,而后温度保持相对恒定。对于纯溶剂来说,在一定压力下,凝固点是固定不变的,直到全部液体凝固成固体后才会下降。相对恒定的温度即为凝固点。 对于溶液来说,除温度外还有溶液浓度的影响。当溶液温度回升后,由于不断析出溶剂晶体,所以溶液的浓度逐渐增大,凝固点会逐渐降低。因此,凝固点不是一个恒定的值。如把回升的最高点温度作为凝固点,这时由于已有溶剂晶体析出,所以溶液浓度已不是起始浓度,而大于起始浓度,这时的凝固点不是原浓度溶液的凝固点。要精确测量,应测出步冷曲线,按图1(b )所示方法,外推至f T 校正。 图1 溶剂和溶液的步冷曲线 2. 实验操作 2.1 实验用品、仪器型号及测试装置示意图 SWC-IID 精密数字温度温差仪、冷阱、大试管、移液管(25 mL )、85-2型恒温磁力搅拌器、DC-2010节能型智能恒温槽、分析天平。 去离子水,尿素(分析纯)。 测试装置示意图(如下)

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

实验报告二 实验名称:一、生产者-消费者问题的多线程解决方案 二、设计一个执行矩阵乘法的多线程程序 日期:2015-10-22 班级:13级计科学号:姓名: 一、实验目的 1.掌握线程的同步与互斥 2.掌握生产者消费者的实现问题 3.掌握多线程的编程方法 4.掌握矩阵乘法的基本计算原理以及实现 二、实验内容 1.生产者-消费者问题的多线程解决方案 2.设计一个执行矩阵乘法的多线程程序 三、项目要求与分析 1.请查阅资料,掌握线程创建的相关知识以及矩阵乘法的相关知识,了解java语言程序编写的相关知识 2.理解线程的实验步骤 在本次试验中,以“生产者-消费者”模型为依据,提供了一个多线程的“生产者-消费者”实例,编写java代码调试运行结果,得出相应的结论。 理解矩阵乘法的实验步骤 四、具体实现 1.生产者-消费者实例 (1)创建一个缓冲信息发送接收通道接口,并创建邮箱盒子类实现,主要代码如下: ength; j++) { ength; j++)

{ " "); } ""); } ""); } (1)创建多线程类,并实现Runnable接口同步对矩阵进行分行计算,主要代码如下: etName()+"\t开始计算第 "+(task+1)+"行"); for(int i=0; i<; i++) { for(int j=0; j<; j++) { [task][i] += [task][j] * [j][i]; } } } ; } (2)通过不断改变矩阵大小,线程数目,,调试程序,运行结果: 五、所遇问题与解决方法 1.在生产者-消费者多线程试验中,刚开始没有考虑到使用线程睡眠,运行结 果速度之快,没法观看数据变化,后面定义了睡眠控制,使得问题得以解决2.在多线程矩阵开发实验中,刚开始定义矩阵太小,测试结果不太明显,后面 通过把矩阵改大,并且线程数目不断变化使得结果明显。 六、实验总结 深刻了解了生产者消费者多线程,进一步理解了“生产者-消费者”模型。同时也掌握了一些java编程语言相关知识。多线程矩阵实验中,发现矩阵小时,线程越少,运行时间越长;而矩阵过大时,线程数量与运行时间成反比。

大学物理化学实验报告

年月日评定: 姓名:学号: 年级:专业: 室温:大气压: 一、实验名称:BET容量法测定固体的比表面积 二、实验目的: 三、实验原理: 四、实验数据及处理: 五、讨论思考: 1. 氮气及氢气在该实验中的作用是什么? 2. 若用Langmuir方法处理测量得到的数据,样品的比表面偏大还是偏 小?

年月日评定:姓名:学号: 年级:专业: 室温:大气压: 一、实验名称:恒温水浴的组装及其性能测试 二、实验目的: 三、实验原理: 四、实验数据及处理: 请完成下表: 表1 恒温槽灵敏度测量数据记录

五、作图: 以时间为横坐标,温度为纵坐标,绘制25℃和30℃的温度—时间曲线,求算恒温槽的灵敏度,并对恒温槽的性能进行评价。 六、讨论思考: 1. 影响恒温槽灵敏度的主要因素有哪些,试作简要分析? 2. 欲提高恒温槽的控温精度,应采取哪些措施?

年月日评定: 姓名:学号: 年级:专业: 室温:大气压: 一、实验名称:最大泡压法测定溶液的表面张力 二、实验目的: 三、实验原理: 四、实验数据及处理 1.以纯水的测量结果计算仪器毛细管常数K′,纯水的表面张力σ查书附录。 ?p1=?p2=?p3= 平均值:?p=K′=σ /?p 2.计算各溶液的σ值(K′=σ /?h) 表1 各溶液的表面张力σ c/mol· L-1 σ /N·m-1 3.做σ-c图,并在曲线上取十个点,分别做出切线,求得对应的斜率(dσ -d c)r,求算各浓度的吸附量Γ,附图。

表2 各溶液的吸附量 4. 做(c /Γ)-c 图,由直线斜率求其饱和吸附量∞Γ,并计算乙醇分子的横 截面积σB ,附图。 表3 c /~c 数据表 斜率= ,∞Γ= , σB =1/∞ΓL = 五、讨论思考: 1. 与文献值(见书中附录)对照,检验你的测定结果,并分析原因。 2. 增(减)压速率过快,对测量结果有何影响?表面张力测定仪的清洁与 否和温度之不恒定对测量结果有何影响?

实验报告五 生产者和消费者问题

实验报告五 ——生产者和消费者问题 姓名:丛菲学号:20100830205 班级:信息安全二班一、实习内容 ?1、模拟操作系统中进程同步和互斥 ?2、实现生产者和消费者问题的算法实现 二、实习目的 ?1、熟悉临界资源、信号量及PV操作的定义与物理意义 ?2、了解进程通信的方法 ?3、掌握进程互斥与进程同步的相关知识 ?4、掌握用信号量机制解决进程之间的同步与互斥问题 ?5、实现生产者-消费者问题,深刻理解进程同步问题 三、实习题目 ?在Linux操作系统下用C实现经典同步问题:生产者—消费者,具体要求如下: (1)一个大小为10的缓冲区,初始状态为空。 (2)2个生产者,随机等待一段时间,往缓冲区中添加数据,若缓冲区已满,等待消 费者取走数据之后再添加,重复10次。 (3)2个消费者,随机等待一段时间,从缓冲区中读取数据,若缓冲区为空,等待生 产者添加数据之后再读取,重复10次。 ?提示 本实验的主要目的是模拟操作系统中进程同步和互斥。在系统进程并发执行异步推进的过程中,由于资源共享和进程间合作而造成进程间相互制约。进程间的相互制约有两种不同的方式。 (1)间接制约。这是由于多个进程共享同一资源(如CPU、共享输入/输出设备)而引起的,即共享资源的多个进程因系统协调使用资源而相互制约。 (2)直接制约。只是由于进程合作中各个进程为完成同一任务而造成的,即并发进程各自的执行结果互为对方的执行条件,从而限制各个进程的执行速度。 生产者和消费者是经典的进程同步问题,在这个问题中,生产者不断的向缓冲区中写入数据,而消费者则从缓冲区中读取数据。生产者进程和消费者对缓冲区的操作是互斥,即当前只能有一个进程对这个缓冲区进行操作,生产者进入操作缓冲区之前,先要看缓冲区是否已满,如果缓冲区已满,则它必须等待消费者进程将数据取出才能写入数据,同样的,消费者进程从缓冲区读取数据之前,也要判断缓冲

燃烧热物化实验报告

燃烧热的测定 姓名:憨家豪学号:2012012026 班级:材23 同组人:赵晓慧 实验日期:2014年4月19日提交报告日期:2014年4月20日 实验老师姓名:郭勋 1 引言 1.1实验目的 (1)熟悉弹式量热计的原理、构造及使用方法; (2)明确恒压燃烧热与恒容燃烧热的差别及相互关系; (3)掌握温差测量的实验原理和技术; (4)学会用雷诺图解法校正温度改变值; 1.2实验原理 在指定温度及一定压力下,1 mol物质完全燃烧时的定压反应热,称为该物质在此温度下的摩尔燃烧热,记作△c H m。通常,完全燃烧是指C→CO2(g),H2→H2O(l),S→SO2(g),而N、卤素、银等元素变为游离状态。由于在上述条件下△H=Q p,因此△c H m也就是该物质燃烧反应的等压热效应Q p。 在实际测量中,燃烧反应在恒容条件下进行(如在弹式量热计中进行),这样直接测得的是反应的恒容热效应Q v(即燃烧反应的△c U m)。若反应系统中的气体均为理想气体,根据热力学推导,Q p和Q v的关系为 Q P=Q V+?nRT(1)式中:T——反应温度,K; ?n——反应前后产物与反应物中气体的物质的量之差; R——摩尔气体常数。

通过实验测得Q V值,根据上式就可计算出Q P,即燃烧热的值。 测量热效应的仪器称作量热计。量热计的种类很多。一般测量燃烧热用弹式量热计。本实验所用量热计和氧弹结构如图2-2-1和图2-2-2所示。实验过程中外水套保持恒温,内水桶与外水套之间以空气隔热。同时,还对内水桶的外表面进行了电抛光。这样,内水桶连同其中的氧弹、测温器件、搅拌器和水便近似构成一个绝热体系。 弹式量热计的基本原理是能量守恒定律。样品完全燃烧所释放的能量使得氧弹本身及

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

操作系统上机实验报告 实验名称: 生产者与消费者问题模拟 实验目的: 通过模拟生产者消费者问题理解进程或线程之间的同步与互斥。 实验内容: 1、设计一个环形缓冲区,大小为10,生产者依次向其中写入1到20,每个缓冲区中存放一个数字,消费者从中依次读取数字。 2、相应的信号量; 3、生产者和消费者可按如下两种方式之一设计; (1)设计成两个进程; (2)设计成一个进程内的两个线程。 4、根据实验结果理解信号量的工作原理,进程或线程的同步\互斥关系。 实验步骤及分析: 一.管道 (一)管道定义 所谓管道,是指能够连接一个写进程和一个读进程的、并允许它们以生产者—消费者方式进行通信的一个共享文件,又称为pipe文件。由写进程从管道的写入端(句柄1)将数据写入管道,而读进程则从管道的读出端(句柄0)读出数据。(二)所涉及的系统调用 1、pipe( ) 建立一无名管道。 系统调用格式 pipe(filedes) 参数定义 int pipe(filedes); int filedes[2]; 其中,filedes[1]是写入端,filedes[0]是读出端。 该函数使用头文件如下: #include #inlcude #include 2、read( ) : 系统调用格式 read(fd,buf,nbyte) 功能:从fd所指示的文件中读出nbyte个字节的数据,并将它们送至由指针buf 所指示的缓冲区中。如该文件被加锁,等待,直到锁打开为止。 参数定义:

int read(fd,buf,nbyte); int fd; char *buf; unsigned nbyte; 3、write( ) 系统调用格式 read(fd,buf,nbyte) 功能:把nbyte 个字节的数据,从buf所指向的缓冲区写到由fd所指向的文件中。如文件加锁,暂停写入,直至开锁。 参数定义同read( )。 (三)参考程序 #include #include #include int pid1,pid2; main( ) { int fd[2]; char outpipe[100],inpipe[100]; pipe(fd); /*创建一个管道*/ while ((pid1=fork( ))==-1); if(pid1==0) { lockf(fd[1],1,0); /*把串放入数组outpipe中*/ sprintf(outpipe,child 1 is using pipe!); /* 向管道写长为50字节的串*/ write(fd[1],outpipe,50); sleep(5); /*自我阻塞5秒*/ lockf(fd[1],0,0); exit(0); } else { while((pid2=fork( ))==-1); if(pid2==0) { lockf(fd[1],1,0); /*互斥*/ sprintf(outpipe,child 2 is using pipe!); write(fd[1],outpipe,50); sleep(5); lockf(fd[1],0,0);

相关文档
最新文档