线程学习笔记一 线程的优越性

1124阅读 0评论2012-03-16 wenzi880607
分类:

线程的几点优越性

(1)       线程是有趣的。

线程类似于进程,线程是由内核时间分片进行管理的,

线程共享内存空间,不同的线程可以存取内存中的同一个变量,所以

不同线程可以读或写声明过的全局变量。只要利用简单的同步机制,所有线程就可以读写已有的数据结构。

(2)       线程是快捷的

线程的系统开销很小,内核无需单独复制进程的内存空间,文件描述符等等,这样就使得线程的创建速度比进程快好多倍,当然线程会利用多CPU

(3)    线程是可移植的

线程的互斥:

如果两个线程分别对同一个变量进行修改,如果都要保存各自的修改结果,必须使用互斥锁,不然,由于线程的并发性,一个线程的修改会覆盖另外一个线程的修改。

在线程程序中pthread_mutex_lock();pthread_mutex_unlock();的调用时必不可少的,他们提供了一种互斥的的方法,两个线程不能同时对同一个互斥对象枷锁。

互斥对象的工作流程:如果线程a试图锁定一个互斥对象,而此时线程b已经锁定了同一个互斥对象,则线程a将进入睡眠状态,一旦线程b释放了该互斥对象(调用函数pthread_mutex_unlock()),线程a就能锁定这个互斥对象了(调用函数pthread_mutex_lock()中返回)互斥对象被锁定,其他线程如果也想锁定这个互斥对象,也将会重复线程a的流程,换句话说,在同一时刻,只能有一个线程可以锁定这个互斥对象,确保同一时刻只有一个线程访问该数据结构,其他的线程将会被转入等待队列。可以推断出如果一个线程试图锁定一个未加锁的线程,POSIX线程库将同意被锁定,不会是线程进入睡眠状态。

线程的运行机制

线程内幕一:多线程是按照它的创建先后的顺序执行的。

线程内幕二:编译器有可能把互斥对象编译成一条机器指令(比如说赋值语句)

            在这种情况下是不可能中断这个机器指令,即使硬件中断也不能,必须保证机器指令的完整性。

 

上一篇:页面的跳转特例
下一篇:jsp页面的多选框传递