xhawk18
xhawk18
S_TASK_STACK_MAGIC 在栈最大空间处放置的魔数,当栈溢出时,这个数据就破坏了。在这样或许能检测栈是否完整。。 LDR sp,r2去掉是因为cortex m3 (v7m架构)可以直接将 [r1]复制到sp,然而cortex m0(v6m架构)不支持,只能先复制到r2,再从r2复制到sp。换到v7m这么写就没必要了。 [-10] 是sp的位置(根据swapcontext开头两句push,str可以计算出)。
不错想法,考虑增加此功能
请按 ESC 退出
因为不加锁的情况下, (*getStaticInstance)() 在多线程代码中,可能调用超过一次。 目前有两个锁,global mutex 和 class T mutex。 只用 global mutex,只要锁住范围包含 (*getStaticInstance)() ,就能解决问题。 但是 (*getStaticInstance)()调用T的构造函数,时间不可控,可能很长。如果用global mutex锁住的话,可能影响其他线程调用其他class的对应(*getStaticInstance)()。 如果解开global mutex不锁柱,就需要用 class T mutex再锁一下。
> 不会死锁。 除非一种特殊情况,就是class A的构造函数里访问class B,class B的构造函数里又访问class A。 这种情况会死锁。但是这种情况本来就是错误的,现实编程也不能这么干。
您用的静态库吗?singleton-cpp本身要编译成 dll
这个库就是为了解决此问题才有的,要不您贴下代码,我看看
还有一种可能,用clang编译才有的。singleton_cpp看到的虽然是同一个 class定义,但实际link不是同一个。 这种情况,class前要加 __attribute__ ((visibility ("default")))
> 文件太大了,能把您的联系方式发我邮箱么? qq 加你了,9608开头的
用cmake编译吧,它会分情况决定加上或不加宏定义singleton_EXPORTS。这样编出来才对。