Menu:

第8章  同步化(5)


信号量(Semaphore)

      基于数据流的LabVIEW天生就具备并行执行程序的能力,这一点我们是十分清楚的,在这种情况下很可能会发生某个资源(全局变量、文件、硬件I/O等等)被多处调用或者访问,如果访问的次序不合适很可能导致那个资源被破坏。
      对于全局变量我们可以用前面谈到的方法把它包装起来,保证在任意时刻只有一个调用者可以访问它。
      其它的则可以通过信号机制来限制资源的合理使用。LabVIEW提供了这种信号机制,例图所示是信号量的内置vi。


      来自NI文档中的表述:

      信号量可以用来保护两个或多个关键代码段,这些关键代码段不能并发调用。在进入一个关键代码段之前,线程必须获取一个信号量。如果关键代码段中没有任何线 程,那么线程会立即进入该框图中的那个部分。一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释 放信号量。为了完成这个过程,需要创建一个信号量,然后将Acquire Semaphore VI以及Release Semaphore VI分别放置在每个关键代码段的首末端。确认这些信号量VI引用的是初始创建的信号量。


应用示例

     这个实例使用信号机制来保护“配置文件(ini文件)“。当其它使用者已经打开这个配置文件时,会弹出一个对话框告知配置文件已经被打开。
     关于“配置文件”后面会谈到。