涉及到dsp的移植,所以研究了一下。cxswicher是用于intel处理器ipp优化的,编译时就不要了。cxerror必须要,但是其采用了多线程技术,所以要disable掉大多数代码。
cxerror用到的多线程技术包括windows.h或pthread.h(linux下),为什么要用呢?在多线程程序里,有第三种数据类型:线程数据(TSD: Thread-Specific Data)。它和全局变量很象,在线程内部,各个函数可以象使用全局变量一样调用它,但它对线程外部的其它线程是不可见的。这种数据的必要性是显而易见的。例如我们常见的变量error,它返回标准的出错信息。它显然不能是一个局部变量,几乎每个函数都应该可以调用它;但它又不能是一个全局变量,否则在A线程里输出的很可能是B线程的出错信息。要实现诸如此类的变量,我们就必须使用线程数据。我们为每个线程数据创建一个键,它和这个键相关联,在各个线程里,都使用这个键来指代线程数据,但在不同的线程里,这个键代表的数据是不同的,在同一个线程里,它代表同样的数据内容。
我理解多线程,其实和单片机、DSP的多任务处理类似,就是多个程序分时间片在运行,任务有不同的优先级,操作系统提供中断管理。
cxerror用到的多线程技术包括windows.h或pthread.h(linux下),为什么要用呢?在多线程程序里,有第三种数据类型:线程数据(TSD: Thread-Specific Data)。它和全局变量很象,在线程内部,各个函数可以象使用全局变量一样调用它,但它对线程外部的其它线程是不可见的。这种数据的必要性是显而易见的。例如我们常见的变量error,它返回标准的出错信息。它显然不能是一个局部变量,几乎每个函数都应该可以调用它;但它又不能是一个全局变量,否则在A线程里输出的很可能是B线程的出错信息。要实现诸如此类的变量,我们就必须使用线程数据。我们为每个线程数据创建一个键,它和这个键相关联,在各个线程里,都使用这个键来指代线程数据,但在不同的线程里,这个键代表的数据是不同的,在同一个线程里,它代表同样的数据内容。
我理解多线程,其实和单片机、DSP的多任务处理类似,就是多个程序分时间片在运行,任务有不同的优先级,操作系统提供中断管理。