多线程编程

来源:互联网 发布:mac rvm 安装ruby 慢 编辑:程序博客网 时间:2024/05/21 17:15
《Windows环境下的多线程编程原理与应用》  王险峰等


内核对象是由系统内核分配的一块内存(数据结构),而且只能由内核来访问。应用程序不能在内存中定位这些数据结构,只能通过Win32 API来操纵,此时,使用句柄来代表这些对象。句柄是进程内共享的。
Windows NT系统是抢先式动态优先级操作系统。
对静态变量的访问需要序列化,因为静态变量是进程范围可见的,而自动变量位于线程自己的堆栈,因此无需序列化。一个函数如果只用自动变量,则它是可重入的。
多线程的开发需要可重入函数库的支持。


进程的创建调用CreateProcess()函数,使用ExitProcess()结束进程,使用TerminateProcess()结束其他进程。创建线程可以使用CreateThread()或AfxBeginThread()函数,结束线程可以使用ExitThread()和TerminateThread()或AfxEndThread()来实现。
线程的优先级最低为0,最高为31。
信号量是通过计数来对线程访问资源进行控制的,使用Semaphore()创建,使用WaitForSingleObject()或WaitForMultipleObjects()来获得访问资源的资格,使用ReleaseSemaphore()释放信号量。MFC中,通过类CSemaphore进行了封装,并使用Lock()和UnLock来访问或释放信号量。
互斥内核对象使得在任何时候都至多只有一个线程可以访问资源。主要的函数有:CreateMutex(),OpenMutex(),ReleaseMutex()等。在MFC中被封装为CMutex类。
原创粉丝点击