函数内部数据的有效访问的“加锁”操作
考虑一个问题:什么是对变量的有效访问?
我的回答是对变量写入特定有效数值后,再去进行读操作才是真正有效合法的。如果变量中未写入有效数据就去访问,那就是非法操作,程序运行过程中总是会遇到内存变量未写入有效数据的情况,正确的做法就是加一把“锁”(条件判断),只有当有“钥匙”(写入有效数据)才能运行。
函数内部使用if条件判断,只有当条件满足的时候才运行某些代码,我称之为“加锁操作”,之所以要单独记录下来是因为,最近在看以前同事写的stm32单片机代码,里面有好多个循环,例如串口中断服务函数、定时器中断服务函数、main()函数内部主循环,还有就是内嵌RTOS操作系统的各个任务,从宏观上看这些循环都是在运行的,现在就存在一个问题就是这写循环的运行先后顺序,特别是当某两个循环之间需要用到同一个全局变量的时候,如果使用全局变量的数值还没有准备好,如果不进行if加锁操作,直接访问就会遇到问题。正确的做法就是使用if条件判断加一把锁,只有当条件满足的时候才运行,如果条件不满足直接返回或者直接跳过去。因为各个循环都在运行,总有使用的全局变量被写入有效数值的情况,这个时候在另外一个循环中如果再遇到“这把锁”就可以解锁运行条件判断中的语句了,保证了全局变量数据的有效访问。
最后,函数就是一个“数据处理器”,也就是说重要的是数据本事,而不是数据存储单元代表的变量本身。变量本事是一个载体或者容器,起到存储数据的作用,也就是数据的“立足之地”,重要是这个“立足之地”里面的内容。