您的位置:首页 > 职场人生

摘录-IT企业必读的200个.NET面试题-07 .NET多线程编程

2015-07-05 01:53 323 查看

多线程的基本概念

Q: 请解释操作系统层面上的线程和进程

进程代表了一个正在运行的应用程序的实体,而一个进程中可包含1个或多个线程。

Q: 多线程程序在操作系统里是并行执行的吗

在单CPU的计算机架构上,任何时候只可能存在一个运行的线程,操作系统通过快速的调度轮换使使用者感觉到多线程在同时执行。而在多CPU的架构上,则可能存在完全并行的线程。

Q: 什么是纤程

纤程是微软公司提出的轻量级线程的概念,一个纤程拥有自己的栈和寄存器状态。一个线程可以包含多个纤程,和线程由操作系统调度有所不同的是,线程内的纤程的调度完全由程序员自己控制,操作系统的内核完全不会知道纤程的存在。

.NET中的多线程编程

Q: 如何使用.NET的程序池

System.Threading.ThreadPoll类型封装了程序池的操作。每个进程都有一个线程池,.NET提供了程序池管理的机制,所有程序池中的线程都是后台线程,它们不会阻碍程序的退出。

Q: 如何定义线程独享的全局数据

线程本地存储是一种提供了线程独享的全局数据功能的机制。在.NET中,可以使用Thread类型的SetData和GetData来操作TLS数据。同时,.NET提供了名为ThreadStatic特性来申明线程独享的数据。

Q: 如何阻止线程执行上下文的传递

线程的执行上下文是所有线程上下文的一个包装,在通常情况下,当前线程的执行上下文会自动流入到新建的线程之中。可以使用定义在System.Threading.ThreadPool类型中的UnsafeQueueUserWorkItem方法和定义在ExecutionContext类型中的SuppressFlow方法来阻止这样的流动。

多线程程序的线程同步

Q: 什么是同步块和同步块索引

同步块是指.NET维护的同步块数组中的某个元素,负责提供线程同步的操作,当某个线程拥有某个同步块时,其他线程就在试图访问该同步块时进入等待状态。同步块索引是每个堆内对象都会分配的一个字段。

Q: C#的lock关键字有何作用

lock关键字实质是Monitor.Enter和Monitor.Exit两个方法的简化语法,功能上实现了进入和退出某个对象的同步。

Q: 可否对引用类型对象自身进行同步

对引用类型自身进行同步,指的是类似于lock(this)这样的代码。把对象自身作为同步对象,会导致类型缺乏健壮性。当某个类型使用者恶意长期占用对象的同步块时,所有的其他使用者将会被死锁。

Q: 什么是互斥体,Mutex类型和Monitor类型的功能有何区别

互斥体是操作系统内同步线程的内核对象,有相应的Win32函数来操作互斥体对象。在.NET中,Mutex类型封装了所有互斥体的操作,和Monitor类型相比,Mutex类型的作用可以跨越进程,相应的,因为是在操作系统的内核中完成,所以Mutex类型的性能相对较差。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: