﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-掌握根本、力争创新-随笔分类-多线程/动态连接</title><link>http://www.cppblog.com/tspha/category/4018.html</link><description>达则兼济天下；穷则独善其身</description><language>zh-cn</language><lastBuildDate>Thu, 22 May 2008 17:40:31 GMT</lastBuildDate><pubDate>Thu, 22 May 2008 17:40:31 GMT</pubDate><ttl>60</ttl><item><title>WIN32多线程程序设计的基本概念</title><link>http://www.cppblog.com/tspha/archive/2007/04/16/22010.html</link><dc:creator>风网</dc:creator><author>风网</author><pubDate>Mon, 16 Apr 2007 04:46:00 GMT</pubDate><guid>http://www.cppblog.com/tspha/archive/2007/04/16/22010.html</guid><wfw:comment>http://www.cppblog.com/tspha/comments/22010.html</wfw:comment><comments>http://www.cppblog.com/tspha/archive/2007/04/16/22010.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tspha/comments/commentRss/22010.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tspha/services/trackbacks/22010.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 理解多线程及其同步、互斥等通信方式是理解现代操作系统的关键一环。在多线程程序设计时,我们首先要了解进程和线程的基本概念及它们之间的关系。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">进程（Process）</span>是具有一定独立功能的程序关于某个数据集合上的一次运行活动，是系统进行资源分配和调度的一个独立单位。进程是程序在某个数据集上的执行，是一个动态实体。它因创建而产生，因调度而运行，因等待资源或事件而被处于等待状态，因完成任务而被撤消，反映了一个程序在一定的数据集上运行的全部动态过程。<br><span style="COLOR: red">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;线程（Thread）</span>是进程的一个实体，是CPU调度和分派的基本单位。线程不能够独立执行，必须依存在应用程序中，由应用程序提供多个线程执行控制。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="COLOR: red">线程和进程的关系是</span>：线程是属于进程的，线程运行在进程空间内，同一进程所产生的线程共享同一内存空间，当进程退出时该进程所产生的线程都会被强制退出并清除。线程可与属于同一进程的其它线程共享进程所拥有的全部资源，但是其本身基本上不拥有系统资源，只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。每个进程具有独立的地址空间，而该进程内的所有线程共享该地址空间。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 常用的<span style="COLOR: red">进程间通信（IPC）</span>机制有:（1）剪贴板(Clip Board)；（2）动态数据交换(Dynamic Data Exchange)；（3）组件对象模型(Component Object Model)；（4）文件映射(File Mapping)；（5）邮件槽(Mail Slots)；（6）管道(Pipes)；（7）Win32套接字(Socket)；（8）远程过程调用(Remote Procedure Call)；（9）WM_COPYDATA消息(WM_COPYDATA Message)。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WIN32靠线程的优先级（达到抢占式多任务的目的）及分配给线程的CPU时间来调度线程。多线程调度的机制为：<br>&nbsp;1）运行一个线程，直到被中断或线程必须等待到某个资源可用；<br>&nbsp;2）保存当前执行线程的描述表(上下文)；<br>&nbsp;3）装入下一执行线程的描述表(上下文)；<br>&nbsp;4）若存在等待被执行的线程，则重复上述过程。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WIN32核心对象包括进程、线程、文件、事件、信号量、互斥体和管道，核心对象可能有不只一个拥有者，甚至可以跨进程。WIN32线程控制主要实现线程的创建、终止、挂起和恢复等操作，这些操作都依赖于WIN32提供的一组API和具体编译器的C运行时库函数。线程之间通信的两个基本问题是互斥和同步。在WIN32中，同步机制主要有以下几种：（1）事件(Event);（2）信号量(semaphore);（3）互斥量(mutex);（4）临界区(Critical section)。</p>
<img src ="http://www.cppblog.com/tspha/aggbug/22010.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tspha/" target="_blank">风网</a> 2007-04-16 12:46 <a href="http://www.cppblog.com/tspha/archive/2007/04/16/22010.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>