新闻中心

EEPW首页 > 测试测量 > 设计应用 > labview信号量的使用

labview信号量的使用

作者:时间:2017-01-06来源:网络收藏
关于信号量的使用,程序自带帮助文件的说明是这样的:

信号量(互斥量)是用来保护对共享资源进行访问的一个对象。被访问的共享资源的代码叫作关键临界段。在同一时间,只有一定数量的任务可以访问信号量。信号量以此方式保护对重要部分的访问。通常情况下,一次只有一个任务可以访问被通用信号量保护的临界段。但是,信号量可能允许一个以上任务(预定义值以下)访问重要部分。

本文引用地址:http://www.eepw.com.cn/article/201701/337107.htm

如要指定同时访问被通用信号量保护的重要部分的任务数量,连接获取信号量引用VI的大小输入端。该VI获取对现有信号量的引用或新建一个信号量,大小输入端指定同一时间可获取信号量的任务数量。使用获取信号量VI可以获取对一个信号量的访问。如使用“获取信号量引用”VI创建的信号量的大小为1,则一次只有一个任务可访问信号量。所以,必须使用释放信号量VI,释放对信号量的访问。这样,另一个任务才能访问信号量。使用释放信号量引用VI,释放对信号量的引用。

注:只要非空闲的顶层VI引用了某个信号量,信号量就一直在内存中。如顶层VI为空闲,LabVIEW将释放该VI的全部信号量引用,包括顶层VI的子VI中的引用。如LabVIEW释放上一个引用至命名信号量,LabVIEW将销毁信号量。因为只能获取引用至一个未命名信号量的引用,当顶层VI空闲时,LabVIEW将销毁一个未命名信号量。如要在多个顶层VI之间使用信号量,需为信号量命名并从顶层VI调用“获取信号量引用”VI,这样每个VI就有了对信号量的唯一引用。

将这些难懂的语言转化为我自己的语言吧:

信号量大部分是用在这种情形下:多个VI中都使用了某一个子Vi,或者含有一个全局变量(主要的)。这几个VI同时运行的话,势必会互相影响(这一点之前已经说明过),导致程序出错。

这时候就用到了信号量。如图所示:


上面的是总VI,下面的是一个信号量下面的三个subVI的程序框图

而子VI中都存在所示的程序段,即 config Read 还有另外一个在顺序结构的下一帧,不看也罢

这样,这三个子VI独立运行的时候,都将访问Config REAd ,这样就可能造成调用子程序的混乱。

在此之前,我们调用同一个子VI的时候,都是控制好顺序,但是现在的三个字VI是同时运行的,我们不能够让其一个运行完毕,再运行另外一个,这样也不符合我们程序设计的目的。

于是信号量出现了。

信号量控制 三个字VI的共享资源,不同时被调用。当然也不确定哪一个子VI先访问共享资源,但是不要紧,他们三个还是很和谐的,加入第二个先运行,那么他就会锁定共享资源,说“哥先用”。余下的两个就会说“你先用呗,我也不着急用”。然后排在后面,当它用完之后,就要释放掉资源,他自己不会释放的,所以,我们需要将释放信息量写入到程序中,然后死一个和第三个VI就可以去调用那个共享资源了,当然,还是只有一个可以用。“那哥用了?好不”第一个对第三个说。“用吧,我反正不着急”。

过程大约是这样的,如果我没理解错的话。

主要是为了防止共享资源被 同时访问,避免出错。也就是排斥用法!

先理解到这,再接再厉




关键词: labview信号

评论


技术专区

关闭