labview信号量的使用
扫描二维码
随时随地手机看文章
关于信号量的使用,程序自带帮助文件的说明是这样的:
信号量(互斥量)是用来保护对共享资源进行访问的一个对象。被访问的共享资源的代码叫作关键临界段。在同一时间,只有一定数量的任务可以访问信号量。信号量以此方式保护对重要部分的访问。通常情况下,一次只有一个任务可以访问被通用信号量保护的临界段。但是,信号量可能允许一个以上任务(预定义值以下)访问重要部分。
如要指定同时访问被通用信号量保护的重要部分的任务数量,连接获取信号量引用VI的大小输入端。该VI获取对现有信号量的引用或新建一个信号量,大小输入端指定同一时间可获取信号量的任务数量。使用获取信号量VI可以获取对一个信号量的访问。如使用“获取信号量引用”VI创建的信号量的大小为1,则一次只有一个任务可访问信号量。所以,必须使用释放信号量VI,释放对信号量的访问。这样,另一个任务才能访问信号量。使用释放信号量引用VI,释放对信号量的引用。
注:
将这些难懂的语言转化为我自己的语言吧:
信号量大部分是用在这种情形下:多个VI中都使用了某一个子Vi,或者含有一个全局变量(主要的)。这几个VI同时运行的话,势必会互相影响(这一点之前已经说明过),导致程序出错。
这时候就用到了信号量。如图所示:
上面的是总VI,下面的是一个信号量下面的三个subVI的程序框图。
而子VI中都存在所示的程序段,即 config Read 还有另外一个在顺序结构的下一帧,不看也罢
这样,这三个子VI独立运行的时候,都将访问Config REAd ,这样就可能造成调用子程序的混乱。
在此之前,我们调用同一个子VI的时候,都是控制好顺序,但是现在的三个字VI是同时运行的,我们不能够让其一个运行完毕,再运行另外一个,这样也不符合我们程序设计的目的。
于是信号量出现了。
信号量控制 三个字VI的共享资源,不同时被调用。当然也不确定哪一个子VI先访问共享资源,但是不要紧,他们三个还是很和谐的,加入第二个先运行,那么他就会锁定共享资源,说“哥先用”。余下的两个就会说“你先用呗,我也不着急用”。然后排在后面,当它用完之后,就要释放掉资源,他自己不会释放的,所以,我们需要将释放信息量写入到程序中,然后死一个和第三个VI就可以去调用那个共享资源了,当然,还是只有一个可以用。“那哥用了?好不”第一个对第三个说。“用吧,我反正不着急”。
过程大约是这样的,如果我没理解错的话。
主要是为了防止共享资源被 同时访问,避免出错。也就是排斥用法!
先理解到这,再接再厉