Windows 线程笔记

一  概念及特点

1 线程是程序执行流的最小单元,因此也是独立调度和分配CPU的最小单位,也被称为轻量级进程。每个程序至少有一个线程,若一个程序中只有一个线程,则称为单线程程 序,  在一个程序中同时运行多个线程执行不同的任务,称为多线程。

2 线程三个状态

   a 就绪  线程具备运行所需要的所有条件,逻辑上可以运行,正在等待处理。

   b 运行  线程占有CPU,正在运行。

   c 阻塞   线程正在等待某个事件或信号量,逻辑上不可执行。

二 线程的通信方式及特点

线程间有三种通信方式:全局变量、Message消息机制、事件(Event 对象)

   1 全局变量   更改全局变量的方式,一般用violate修饰。

   2 Message消息机制 PostMessage(),SendMessage(),PostThreadMessage()

       PostThreadMessage()可以将消息发送到指定进程,PostMessage()是异步的,SendMessage()是同步的。

   3 Event 对象   Event 对象有两种状态,有信号和无信号,线程可以监视有信号时的事件,以便在适当的时候执行对事件的操作。

三  线程的同步方式方式及特点

   1  临界区  它只能同步一个进程中的线程,不能跨进程同步,用于单个进程内的代码同步,效率较高。      

          相关方法如下,
           初始化,一般windows编程都有类似初始化的方法
           CRITICAL_SECTION  _critical
           InitializeCriticalSection(& _critical) 
           释放资源,如果以后还要用_critical,则要重新调用InitializeCriticalSection
           DeleteCriticalSection(& _critical) 
           把代码保护起来。调用此函数后,他以后的资源其他线程就不能访问了。
           EnterCriticalSection(& _critical)
           离开临界区,表示其他线程能够进来了。注意EnterCritical和LeaveCrticalSection必须是成对出现的!当然除非你是想故意死锁!
           LeaveCriticalSection(& _critical)

   2  互斥量  可以跨进程同步,也可以确保程序只有一个实例运行。

          相关函数如下,

          CreateMetux(NULL,FALSE,NULL);

          WaitForSingleObject(hMutex,INIFINIT);

          ReleaseMutex();

          WaitForMutilObjects(.......);

          OpenMetux();

   3  信号量  信号允许多个线程同时使用共享资源

          线程量的几个操作

          CreateSemaphore()  
     OpenSemaphore()  
     ReleaseSemaphore()  
     WaitForSingleObject()  

   4 事件  多用于线程通信,可用于跨进程同步

          相关函数如下,

          hEvent = CreateEvent(NULL,FALSE,FALSE,NULL);

          WatiForSingleObject(hEvent,INIFINET);

          SetEvent(hEvent);

          RsetEvent(hEvent);

          WaitForMutilObjects(.......);

          OpenEvent(......);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值