在SMP系统使用多线程需要注意的事情
2010年1月28日
没有评论
尽管你一般可以忽略你的系统是运行在SMP架构上还是单处理器上,不过还是有些事情会影响到你。不幸的是,这些事情都是低概率事件,它们可能在你的开发阶段没有出现,但是可能在测试、演示或更糟的,在实际应用中出现。在编程的时候花些时间做些防御性的措施可以在后续的阶段减少问题的发生几率。
下面就是你可能在SMP系统上遇到的事情:
- 多个线程确实可以也能同时运行——不过依赖于像FIFO调度、优先级这些东西来同步是不允许的;
- 多线程可与中断服务程序(ISR)同时运行——也就是说你不但要保护线程不受ISR的影响,也要保护中断服务程序不受线程的影响;
- 有些操作你期望是最小单元的、单步的,可能会依赖于操作与处理器的不同而不是最小单元的、单步的。这类的操作包括了需要“读取-修改-写入”周期操作的(例如:++,–,|=,&=等等)。你可以查找<atomic.h>文件来查找对应的最小单元替换函数。(这也不是只有SMP系统的问题,大多数的RISC处理器对上面的胆码也不是按照最小单元处理的)
最近评论