在同一进程环境中使用多个线程可以共享所有的进程资源, 而且可以优化程序流程, 使很多工作异步进行;
线程单独拥有的资源有: 线程id, 堆栈, 信号屏蔽字, 一组寄存器的值, errno变量, 调度优先级和策略等;
线程共同拥有的资源有: 进程的所有资源包括程序代码, 全局变量, 堆栈空间, 文件描述符等;
POSIX.1-2001标准中规定的线程接口称为POSIX thread, 或pthreads. 编译时要加-lpthread.
目前的linux内核是以轻量级进程(lightweight process, LWP)的方式实现多线程的.
内核里每个LWP对应用户空间的一个线程, LWP拥有自己的task_struct, 也是一个进程调度单位;
LWP与普通进程的区别是多个LWP共享某些资源, 如: 地址空间, 打开的文件等;
Solaris的线程库就不是一个LWP对应一个用户空间线程, 而是用户空间分时复用数量有限的LWP.
多线程中局部静态变量初始化陷阱:http://www.rxyj.org/html/2010/0424/279529.php
多处理器环境和线程同步的高级话题:http://baiy.cn/doc/cpp/advanced_topic_about_multicore_and_threading.htm
如何解决静态变量的线程安全问题:http://www.programfan.com/club/showtxt.asp?id=294156
http://www.cppblog.com/lymons/archive/2010/08/01/120638.aspx
8 Mar 2004 7:00 AM
在块作用域中的静态变量的规则 (与之相对的是全局作用域的静态变量) 是, 程序第一次执行到他的声明的时候进行初始化.
察看下面的竞争条件:
int ComputeSomething() { static int cachedResult = ComputeSomethingSlowly(); return cachedResult; }