Symbian TLS(线程本地存储) 和 WSD
TLS-Thread Local Storage,它是基于thread的。
WSD-Writable Static Data,它是基于process的。http://www.cnblogs.com/swpattern/archive/2010/05/08/1730556.html
两者都可以用来实现singleton,不过WSD内存开销太多,多用TLS。
TLS的“线程本地”是通过DThread中的一张表实现的,TLS一般实现在DLL中,如果DLL需要TLS,DThread就会为该DLL保留一个表项,大小为一个机器字,记录在表中。DThread会限制其他线程访问这些数据,所以看起来TLS就是线程本地的。
从中也看出,访问DThread需要切换到特权模式,所以访问效率会降低,比直接访问大概慢30倍,DLL调用TLS()或SetTLS等函数时,需要进入特权模式后,kernel查找的当前线程,找到DThread中的这张表,从表中找到对应该当前线程的表项进行操作。
既然TLS的访问有效率上的问题,那么在我们的程序设计上尽量避免大量的TLS操作,尤其应避免重复操作。