// 设置为受保护的操作系统文件,并隐藏
attrib d:\n.txt +s +h

图片 1

创建图标标记 Handlers
(续)

// 取消设置为受保护的操作系统文件,并取消隐藏
attrib d:\n.txt -s -h

 

 

 

操作系统用于管理系统的硬件、软件和数据资源,控制程序的运行,是应用软件与硬件之间的接口,也是人机之间的接口。操作系统的职能包括进程管理、存储管理、文件管理、设备管理、作业管理等。

1、新建一个ATL Project。

 

图片 2

在进程管理中,PV操作在处理进程的同步与互斥问题方面非常重要,当多个进程需要同时访问共享资源时会用到。PV是用荷兰语表示的简写,P表示通过,V表示释放,据说这是计算机领域为数不多的非英语简写。

2、建议将 Project Property 中 Linker –
General – “Register Output” 设为 no,C/C++ – “Code Generation” –
“Runtime Library” 设为 /MTd。

图片 3

图片 4

 

图片 5

PV操作由P操作原语和V操作原语组成,原语也叫原子操作,表示不可中断的过程,这两个原语要操作信号量S。

3、在 Solution Explorer 中右键 Add
Class,选择 ATL Simple Object。并在弹出的对话框中为该 Class
命名。

P操作将S的值减1,如果S<0,则将该进程置为等待状态并加入进程队列中,否则继续执行。

图片 6

V操作将S的值加1,如果S<=0则唤醒等待队列中的第一个进程,否则继续执行。

图片 7

接下来使用单缓存区生产者、消费者问题来描述PV操作的运用,由于只有一个单缓存区,生产速度过快会使缓存区溢出,而消费速度过快会从缓存区拿到空值,如图所示,在加入PV操作后就能解决这些问题

4、添加完成后建议 Build 一下
Project,MIDL compiler 将根据 .idl 文件生成 IIDs and CLSIDs。

图片 8

图片 9

 

5、切换到新增 Class 的 .h
文件中,使其继承接口 IShellIconOverlayIdentifier。

有生产者、消费者两个进程,使用两个PV操作,S1的初值为1,S2的初值为0。生产者第一次执行,S1=0,送产品到缓存区,S2=1;第二次执行时S1=-1,生产者进程转为等待状态并加入进程队列。对于消费者进程,第一次执行过程中S2=0,从缓存区取产品,S1=0,消费产品,由于S1=0,生产者进程便被唤醒了,此时正好缓存区的产品被消费完。同理,如果消费者进程先执行,也照样能保证两个进程的配合无间。

图片 10

PV操作便是通过这样的过程来协调几个需要同步的进程的。

图片 11

发表评论

电子邮件地址不会被公开。 必填项已用*标注