本帖最后由 冷漠 于 2010-8-11 11:14 编辑
……mcu上就那么几个简单的任务, 竟然也要出现死锁, 还想指望用软件能自动解决, 这样的程序员该打pigu。
—— 引用自所长言论
呵呵,无知。看看下面的程序(要不要冷漠写成51程序?)
图2 含有竞争条件的生产者-消费者问题。
……现在回到竞争条件的问题。这里有可能会出现竞争条件,其原因是对count的访问未加限制。有可能出现以下情况:
缓冲区为空,消费者刚刚读取count的值发现它为0。此时调度程序决定暂停消费者并启动运行生产者。生产者向缓冲区中加入一个数据项,将count加1。现在count的值变成了1。它推断认为由于count刚才为0,所以消费者此时很可能在睡眠,于是生产者调用wakeup来唤醒消费者。
不幸的是,消费者此时在逻辑上并未睡眠,所以唤醒信号丢失。当消费者下次运行时,它将测试先前读到的count值,发现它为0,于是去睡眠。这样生产者迟早会添满整个缓冲区,然后睡眠。这样一来两个进程都将永远睡眠下去。 ——摘自 ……
死锁就这样发生了。
上面2个生产者 / 消费者mcu 任务,用HOT大叔的“裸奔嵌入式操作系统HotTask51”写也行,让冷漠用RTX51_FULL写也行也行,哪个不是51mcu上发生的死锁?
所长是玩PC机软件的,以为51mcu做不了什么?——怕是自己不会做吧。
看看 Intel 和 Keil 写的51_RTOS:邮箱、队列、链表,IPC,DiJkstra信号量,Token……内存管理,时钟管理,I/O管理……一个都不少。( 所长该不会说“它没有文件管理”?——我服。)
|