LabVIEWwilliam hill官网
直播中

woshisu

6年用户 263经验值
擅长:可编程逻辑 测量仪表 控制/MCU
私信 关注
[问答]

为什么生产消费者模式称为状态机?

为什么生产消费者模式叫状态机 我觉得还不如创建个变量  我想问下如何控制一个事件的运行 和停止??


就是控制一个循环开始和停止的那种

回帖(7)

王志博

2018-7-29 17:24:03

最佳答案

LABVIEW 核心课程2里有关于生产者消费者的详细介绍,用变量会出现竞争的问题,从而导致数据丢包,生产消费者不会出现这种问题,另外生产消费只是众多状态机的一种,平常使用的是事件驱动的队列消息处理器。
举报

Qyy_19941203

2018-7-30 08:54:39
我是这么理解的
其实生产者消费者模式和状态机是两个东西
但是当生产的和消费的是状态机里面的状态的时候,二者就结合成了基于生产者消费者模式的状态机



控制一个循环的开始可以把循环结构放在条件结构里面执行
举报

Ansersion

2018-7-30 09:57:06
问题一:
说生产消费者模式是状态机,确切来说是生产和消费“产品”的过程是个状态机。
比如你生产一个橘子,它从1个“种子”到“橘子”,再从“橘子”被“吃掉”,前句引号就是一系列状态。每个状态都伴随一些属性以及一些可操作性,比如“种子”是不可“吃”的但是可以“种”,橘子可以“吃”但不能再种,“吃掉”之后就不能“再吃”也不能“再种”等等。而单一的变量则无法表示这些状态,而且会产生1个橘子“被双吃”的问题等等。如果你使用1个结构体作为变量,同时也包含了这些状态,但是这依旧无法解决“多生产者”和“多消费者”的情况,即1个橘子被生产后,就必须立即被消费,否则无法继续生产,而生产消费者模式中使用队列解决了该问题。

问题二:
你说的“控制循环启停”一般指的就是控制任务(或进程或线程)的启停。
控制启动:根据系统和平台的不同,使用其提供的API,比如startTask、fork、pthread_create等等。
控制停止:使用如下格式的任务循环,通过设置停止条件来break循环
while {
if(停止条件) {
break
}
...
}

希望对你有所帮助。
举报

woshisu

2018-7-30 15:04:10
引用: Qyy_19941203 发表于 2018-7-30 08:54
我是这么理解的
其实生产者消费者模式和状态机是两个东西
但是当生产的和消费的是状态机里面的状态的时候,二者就结合成了基于生产者消费者模式的状态机

那你如何停止条件结构里的循环呢
举报

更多回帖

发帖
×
20
完善资料,
赚取积分