@chenxuxiong
2016-05-23T12:57:21.000000Z
字数 1184
阅读 449
操作系统
线程安全 线程 线程与进程的区别 进程的几种状态 通信方式
信号量如何进行通信
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。一个线程安全的计数器类的同一个实例对象在被多个线程使用的情况下也不会出现计算失误。很显然你可以将集合类分成两组,线程安全和非线程安全的。。
线程是CPU分配和调度的基本单位,它被包含在进程之中,是进程中的实际运作单位。
程序:一组指令的有序结合
进程:系统进行资源分配和调度的基本单位,
线程:CPU进行调度和分派的基本单位,本身不拥有系统资源,只拥有一点在运行中必不可少的资源(程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。
进程切换代价大,线程切换代价小
每个线程拥有独立的内存空间,而线程可以理解为程序中一段程序片段的执行
线程的执行特性。
创建 就绪 运行 阻塞 死亡
线程只有 3 个基本状态:就绪,执行,阻塞。
就绪(Runnable):线程准备运行,不一定立马就能开始执行。
运行(Running):进程正在执行线程的代码。
阻塞(Waiting):线程处于阻塞的状态,等待外部的处理结束。
睡眠(Sleeping):线程被强制睡眠。
I/O阻塞(Blocked on I/O):等待I/O操作完成。
同步阻塞(Blocked on Synchronization):等待获取锁。
死亡(Dead):线程完成了执行。
信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即P(信号变量))和发送(即V(信号变量))信息操作。最简单的信号量是只能取0和1的变量,这也是信号量最常见的一种形式,叫做二进制信号量。而可以取多个正整数的信号量被称为通用信号量。这里主要讨论二进制信号量。
**举个例子,就是两个进程共享信号量sv,一旦其中一个进程执行了P(sv)操作,它将得到信号量,并可以进入临界区,使sv减1。而第二个进程将被阻止进入临界区,因为当它试图执行P(sv)时,sv为0,它会被挂起以等待第一个进程离开临界区域并执行V(sv)释放信号量,这时第二个进程就可以恢复执行。**
信号量的总结
信号量是一个特殊的变量,程序对其访问都是原子操作,且只允许对它进行等待(即P(信号变量))和发送(即V(信号变量))信息操作。我们通常通过信号来解决多个进程对同一资源的访问竞争的问题,使在任一时刻只能有一个执行线程访问代码的临界区域,也可以说它是协调进程间的对同一资源的访问权,也就是用于同步进程的。