
第一题:线程的基本概念、线程的基本状态及状态之间的关系?
可以考虑增加一个处理器或换一个更快的处理器 cpu相关指标 % user time ——用户利用率 用户请求事件所占百分比 反映系统运行繁忙程度,如果该值很高,可考虑增加索引,尽量使用简单的表联接,水平分割大表格等方法来降低该值 cpu相关指标 interrupts/sec ——中断速率 cpu每秒处理的中断数 反映系统运行的繁忙程度 cpu相关指标 private bytes ——进程私占字节数 当前进程独占的字节数 计数器有明显的增长,表明可能存在内存泄漏 cpu相关指标 processor queue length ——处理列队中的线程数 指处理列队中的线程数,它只计数就绪的线程,而不计数运行中的线程。其实也有各自的真实pid,但由结构隐藏了,对外的pid为主进程的pid5)线程对操作系统来说就是进程,因此对信号的处理是以进程为单位分发的6)线程总数受限于系统进程数7)系统管理线程的瓶颈:所有线程由管理线程管理8)线程之间的调度是由内核调度器来处理的9)由于计算线程本地数据的方法是基于堆栈地址的位置。由于共享内存在设计时没有处理锁机制,故当有多个进程在访问共享内存时就会产生问题.如:一个进程修改一个共享内存单元,另一个进程在读该共享内存单元时可能有第三个进程立即修改该单元,从而会影响程序的正确性.同时还有分时系统对各进程是分时间片处理的,可能会引起不同的正确性问题.按操作系统的运作方式,则有读锁和写锁来保证数据的。
线程有四种状态:新生状态、可运行状态、被阻塞状态、死亡状态。状态之间的转换如下图所示:
第二题:线程与进程的区别?
1、 线程是进程的一部分,所以线程有的时候被称为是轻权进程或者轻量级进程。

2、 一个没有线程的进程是可以被看作单线程的,如果一个进程内拥有多个进程,进程的执行过程不是一条线(线程)的,而是多条线(线程)共同完成的。
3、 系统在运行的时候会为每个进程分配不同的内存区域,但是不会为线程分配内存(线程所使用的资源是它所属的进程的资源),线程组只能共享资源。那就是说,出了CPU之外(线程在运行的时候要占用CPU资源),计算机内部的软硬件资源的分配与线程无关,线程只能共享它所属进程的资源。
多线程资源控制,由于线程之间共享进程中的资源,所以同一进程中的多个线程的通讯的重心之一是对共享的资源进行控制,例如当多个线程同时使用进程某个资源时,有可能需要采用互斥/同步等手段保证资源被正确操作,在采用互斥/同步手段时候,需要避免产生死锁的情况。当然,要想实现线程,没有核心对多进程(其实是轻量级进程)共享数据段的支持是不行的,因 此,do_fork()提供了很多参数,包括clone_vm(共享内存空间)、clone_fs(共享文件系统信息)、clone_files(共享文 件描述符表)、clone_sighand(共享信号句柄表)和clone_pid(共享进程id,仅对核内进程,即0号进程有效)。2. 互斥量(mutex),信号灯(semaphore),事件(event)都可以被跨越进程使用来进行同步数据操作,而其他的对象与数据同步操作无关,但对于进程和线程来讲,如果进程和线程在运行状态则为无信号状态,在退出后为有信号状态。
5、 进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在。
第三题:多线程有几种实现方法,都是什么?

继承 Thread 类
实现 Runnable 接口再 new Thread(YourRunnableOjbect)
第四题:多线程同步和互斥有几种实现方法,都是什么?
用户态下可以使用~
用户模式下的方法有:原子操作(例如一个单一的全局变量),临界区。内核模式下的方法有:事件,信号量,互斥量。

第五题:多线程同步和互斥有何异同,在什么情况下分别使用他们?举例说明。
线程同步是指线程之间所具有的一种制约关系 , 一个线程的执行依赖另一个线程的消息 , 当它没有得到另一个线程的消息时应等待 , 直到消息到达时才被唤醒 。wait方法导致当前线程等待,直到其他线程调用同步监视器的notify方法或notifyall方法来唤醒该线程。通过程序的运行结果可以看到,尽管在主方法中先启动了consumer线程,但是,由于仓库中没有产品,因此,consumer线程就会调用wait()方法进入等待队列进行等待,直到producer线程将产品生产出来并放进仓库,然后使用notify()方法将其唤醒。
线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待linux 多线程面试题,直到占用资源者释放该资源。线程互斥可以看成是一种特殊的线程同步(下文统称为同步)。
1
2、以下多线程对int型变量x的操作,哪几个不需要进行同步(D)

A. x=y;B. x++; C. ++x; D. x=1;
详见:后面系列解析
3、多线程中栈与堆是公有的还是私有的 (C)
A:栈公有, 堆私有
B:栈公有,堆公有
C:栈私有, 堆公有
D:栈私有,堆私有
4、临界区(Critical Section)和互斥量(Mutex)
两者都可以用于同一进程中不同子线程对资源的互斥访问。
互斥量是内核对象,因此还可以用于不同进程中子线程对资源的互斥访问。
互斥量可以很好的解决由于线程意外终止资源无法释放的问题。
讨论到这里,其实怎么做到多线程安全也比较明朗了,关键字是atomicity(原子性)linux 多线程面试题,只要做到原子性,小到一个primitive type变量的访问,大到一长段代码逻辑的执行,原子性能保证代码串行的执行,能保证代码执行到一半的时候,不会有另一个线程介入。解决问题的关键就是要容易出现问题的代码的原子性,所谓原子性就是指:当a线程在执行某段代码的时候,别的线程必须等到a线程将该段代码执行完毕后,才能执行该代码。为了实现这个需求,我们需要首先拿到全局并发队列(或自己开启一个子线程)来执行耗时的操作,然后在其完成block中拿到全局串行队列来执行ui刷新的任务。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-114185-1.html
军队其实是农民军
那都是我们的领土就完了