LabVIEW中使用队列,通知器,信号量或集合点时的潜在竞争情况

简介: LabVIEW中使用队列,通知器,信号量或集合点时的潜在竞争情况

LabVIEW中使用队列,通知器,信号量或集合点时的潜在竞争情况


有一个应用程序使用了队列,通知器,信号量或集合点,偶尔能看到一个操作(例如元素入队列,元素出队列,等待通知,发送通知,获取信号量等)的超时时间少于指定的时间段。最常见的是,当指定无限超时时,这可能表现为接近瞬时的超时。为什么会看到这种行为?


解答:


的LabVIEW研发组已经发现了可能导致这种行为的队列和通知器代码中的一个错误,并发布了2016 f2补丁来解决这个问题。这一错误可能导致在不同超时调用同一原语,其超时值来自于之前调用的超时值,而不是当前的值。这通常在使用SubVIs封装原语时会出现,但也可能出现在单个VI中。


情况1:


此例再现了使用单个VI时的错误。下面代码在指定无限超时偶尔返回超时。


b1ccdb7def0905b038968733eb1da65e.png

编辑


添加图片注释,不超过 140 字(可选)


情况2:


另一种情况可以在vi.lib中提供的Acquire Semaphore VI的框图中看到:


注意,这个VI本质上只是一个入队原语的封装。因为这是共享的可重入子VI,不同的调用位置可以共享相同的实例。例如,考虑下列代码:

5732cd74cba1e2437db4d64c372382c0.png

编辑


添加图片注释,不超过 140 字(可选)



在这种情况下,由于从多个位置调用相同的原语,所以处于类似于情况1中所看到的情况。再次,代码可能会在无限大的情况下接收周期性的超时。


LabVIEW、LabVIEW开发、LabVIEW编程、LabVIEW程序


上文中提到的例子和资料,均在word中的附件里,可点击下载。进一步了解,可联系们。

相关文章
|
5天前
|
算法 调度 索引
什么是多任务和线程?用线程写的一个udp同步聊天器
什么是多任务和线程?用线程写的一个udp同步聊天器
32 0
|
5天前
|
存储 Linux 调度
Linux多线程【线程控制】
Linux多线程【线程控制】
45 0
|
5天前
|
Java 调度
并发编程之的虚假唤醒和精准唤醒的详细解析
并发编程之的虚假唤醒和精准唤醒的详细解析
14 0
|
8月前
|
供应链 算法 Linux
Linux系统编程6(线程互斥,锁,同步,生产消费模型)
Linux系统编程6(线程互斥,锁,同步,生产消费模型)
282 2
|
10月前
|
Java
【软考学习9】进程的同步与互斥、生产消费者模型
【软考学习9】进程的同步与互斥、生产消费者模型
155 0
|
12月前
|
消息中间件 Cloud Native Java
线程同步模式之保护性暂停
保护性暂停是一种同步模式,用于保护共享资源的完整性。在多线程或多进程环境中,如果多个线程或进程同时访问共享资源,可能会导致数据不一致或者竞态条件等问题
115 0
|
Java
传统的生产者消费者问题,防止虚假唤醒
传统的生产者消费者问题,防止虚假唤醒
89 0
传统的生产者消费者问题,防止虚假唤醒
|
小程序
请排队-在线排队叫号小程序
排队叫号微信小程序-【请排队】的构思和实现
1286 0
请排队-在线排队叫号小程序
7.JUC线程高级-生产消费问题&虚假唤醒
描述 生产消费问题在java多线程的学习中是经常遇到的问题 ,多个线程共享通一个资源的时候会出现各种多线程中经常出现的各种问题。 实例说明 三个类:售货员Clerk,工厂Factory,消费者Consumer Factory和Consumer共享Clerk对象 1.
1231 0