一、进程和线程(process and thread)
进程(process)比作房子(house) 居住的人(occupants)比作线程(threads)
进程是被动的(passive) 线程是主动的(active)
单线程(single threaded)好比一个人住 多线程(multi threaded)好比多个人住
一个进程的所有线程共用内存(memory)
二、互斥(mutual exclusion) 缩写即 mutex
好比你在浴室洗澡别人就要等你洗完 mutex比作了浴室的门锁
有趣的是 mutex又不完全和门锁的作用相同
它是一个“可咨询的锁”,如果线程不遵循使用mutex的原则 mutex 就是无效的 好比有人暴力撬开你浴室的门和你一块洗澡哈哈哈
三、优先级(priorities)
假如浴室门外有一群人等着洗澡,那么就要有一种方式决定谁下一个去洗
线程主要通过 优先级(priority)和 等待时长(length of wait),且先考虑优先级再考虑等待时长
QNX Neutrino 中优先级分为 1(最低)~255(最高)
一个子线程从父线程继承调度策略(scheduling policy)和优先级,但是可以使用pthread_setschedparam() 改变调度策略和优先级,或者使用 pthread_setschedprio() 只改变其优先级
四、信号量(semaphores)
假如在厨房的话,就可以同时有多个人。这时mutex变为了semaphore,可以理解在门外留下N把钥匙,只要门外有钥匙就可以进入。
可以说mutex是一种特殊的semaphore,在大多数情况下都是用信号量(semaphore),在某些特定的环节会用到mutex,因为这就像你家里不可能没有浴室一样,也不可能你把浴室的钥匙随便挂在外面。