1.线程独有:栈,寄存器,信号屏蔽字,errno...等信息,因此各个线程各自有各自的栈区,但是堆区共用。
2.用户态线程的切换在用户态实现,不需要内核支持。
3.每个线程在进程虚拟地址空间中会分配拥有相对独立的栈空间,而并不是共享栈空间,这样会导致运行时栈混乱。
4.任何一个线程都可以创建或撤销另一个线程。
5.进程是资源的分配单位,所以线程并不拥有系统资源,而是共享使用进程的资源,进程的资源由系统进行分配。
6.如果主线程调用pthread_exit,它会等待其他所有对等线程终止,然后再终止主线程和终止整个进程,返回值为retval。
7.与普通进程相比,LWP与其他进程共享大部分它的逻辑地址空间和系统资源;与线程相比,LWP有它自己的进程标识符,优先级,状态,以及栈和局部存储区,并和其他进程有着父子关系另外,线程既可由应用程序管理,又可由内核管理,而LWP只能由内核管理并像普通进程一样被调度。
8.pthread_create创建的线程实际上属于用户级线程。轻量级进程ID(tid)对不同的线程起标识作用,操作系统在进行调度时用的是tid。进程ID(pid)对不同的进程起标识作用。在只有一个线程的进程中:tid的值 = pid的值。同一进程下的多个线程之间属于同一个线程组,其线程组ID(tgid)= 主线程tid = 进程pid。
9.可重入函数:最重要的一个特性,在被多个线程调用时,不会使用任何共享数据。
10.线程安全函数与可重入函数的关系
11.信号量既可以实现同步还可以实现互斥
条件变量需要搭配互斥锁使用,信号量不需要
12.当系统处于安全状态时, 系统中一定无死锁进程
13.死锁四个必要条件
①互斥条件: 线程访问临界区是互斥的。一个资源每次只能被一个执行流使用。
②请求与保持条件: 一个执行流因申请资源而阻塞,而自己的申请到的资源未释放。
③不剥夺条件: 一个线程在未使用完资源时,不能强行剥夺。
④循环等待条件:若干个执行流都在等待对方的资源,而形成首尾相接的循环等待资源的关系。
14. 银行家算法是最有代表性的死锁避免而并非解除算法
15.只有一个生产者和一个消费者,那么就可以做到免锁访问环形缓冲区(Ring Buffer)
16.OSI模型分为 7层,自下而上为,物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
17.在数据链路层不但会增加以太网头部还会在尾部加上以太网尾部
18.MAC地址用来识别数据链路层中相连的节点,长度为48位,6个字节。对于IPv4来说, IP地址是一个4字节, 32位的整数。
19.一台计算机可以绑定多个网卡,进而可以拥有多个MAC地址。
未完待续。。。