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操作,尤其应避免重复操作。

posted on 2010-05-09 09:49  魏方  阅读(394)  评论(0编辑  收藏  举报

导航