# Linux中的线程
NPTL 是 Native POSIX Thread Library(原生 POSIX 线程库)的缩写。
# POSIX标准的pthread库接口

pmap命令可来查看进程的地址空间的情况
# 线程的分离
如果其他线程并不关心线程的返回值,那么连接操作就会变成一种负担:你不需要它,但是你不去执行连接操作又会造成资源泄漏。这时候你需要的东西只是:线程退出时,系统自动将线程相关的资源释放掉,无须等待连接。
# 临界区

# linux下的mutex实现
Linux下,互斥量的实现采用了futex(fast user space mutex)机制。futex是一种用户态和内核态混合使用的同步机制,它可以在用户态完成大部分的同步操作,只有在确实需要进入内核态时才会陷入内核。在 Futex 出现之前,所有的锁操作(无论是否发生竞争)都必须进入内核态,这会带来巨大的系统调用开销。Futex 通过在内核中维护一个简单的等待队列,从而减少了不必要的内核态切换。
# 自旋锁
加锁时竞争失败时,普通互斥量的做法是立刻调用futex_wait,陷入阻塞,让出CPU,安静地等待内核将其唤醒。在临界区非常小且很少发生竞争的情况下,这种策略并不算好,因为如果该线程肯自旋,很可能只需要极短的时间,它就能等到锁的持有线程解锁,继续执行。
自旋锁采用了和互斥量完全不同的策略,自旋锁加锁失败,并不会让出CPU,而是不停地尝试加锁,直到成功为止。