Electronic Joint Business

Solution for E-Business

ELF 对线程局部储存的处理 (一)

线程使用的增加使得开发者期望有更好的方式来处理线程局部数据 (read-local data)。 POSIX 线程接口的有关定义允许在每个线程中独立存储 void * 对象。不过使用该接口很麻烦。你需要在运行时为对象分配一个键(key),如果这个键不再使用就需要释放它。这项工作繁琐而且易出错。如果和动态加载代码(dynamically loaded code)一起使用,就真的成了个大麻烦。 应对这些问题的方法是扩展编程语言,让编译器接手这些工作。以 C/C++ 来说,可以在定义与声明变量时使用新关键字 __thread。这虽然不是个官方扩展,编译器开发者被鼓励实现它以支持新 ABI。用这个关键字定义及声明的变量会自动地局部分配到每个线程。 __thread int i; __thread struct states; extern __thread char *p; 不仅一般用户程序可以受益,运行时环境(runtime)亦能从中获得好处 (如全局变量 errno 必须是线程局部的),而且编译器可以执行构建非自动变量( non-autimatic variable)的优化。注意:用 __thread 来定义自动变量毫无意义也不被允许,这是因为自动变量总是线程局部的。而且,函数作用域中的静态变量应是首选。 No related content found.×Scan to share with WeChat

, ,

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.