S32K3xx手册太厚读不完?我用这篇笔记帮你划好安全与低功耗的重点
2026/6/12 9:41:53
在C++编程的技术点中,多线(进)程的编程是一个非常让人上头的内容。这种情况其实还可以拓展到一些抽象的场景,比如信号、消息和异步等情况。它们看上去和多线程关系不大,但其实内部和多线程都有着密不可分的关系(注意,没说联系,因为有些是类似与多线程应用的情况)。
在多线程编程中,有经验的开发者可能遇到过这种情况,当它们通过一个变量来交换某个状态或数据时,往往在开发和测试时都是没有问题的,但在部署到生产上时,一个月内偶尔会有一两次出现异常的问题。甚至在某些特殊情况下,还会出现偶尔崩溃的情况。这种问题,非常难于定位,而且非常不容易解决。
上面的问题表面看来没有什么复杂的,但其实内部有多种可能。而这些可能往往有的时候都想不到其中涉及到的知识面的宽度。下面对其中主要的进行一下分析说明:
解决问题的方法是先找到并确定问题,然后再根据实际问题的情况来解决这些问题。对于问题的查找和调试可以采用下面的方法:
#defineMEMORY_BARRIER()asmvolatile("mfence":::"memory")// 禁止编译器重排序#defineCOMPILER_BARRIER()asmvolatile("":::"memory")// 在代码中thread_shared_data=new_data;COMPILER_BARRIER();后者则要根据情况来确定与编译器优化的关系的大小,并根据情况来缩小优化的控制。
只有了解你的敌人,才能更好的打败他。既然明白了问题的来源,那么解决的思路也就有了,主要有:
总之,解决问题的方法有很多,细节就看开发者自己确定问题后能够采取哪种方法来应对了。不必拘泥于教条和书本。
正如大家看到一个苹果上有一个小黑点,未必认为会是什么问题,亦或者认为削皮时多削一点就好了。但实际上打开后,内部可能整个苹果都烂得差不多了。本文提到的问题,其实也是这种情况,虽然问题不大,但真要解决进去,会发现可能会涉及到不少的知识面。与诸君共勉!