线程同步--事件内核对象

本文探讨在程序中对线程执行顺序的严格控制,指出关键代码段的局限性,并推荐使用内核对象进行同步。事件内核对象作为其中一种,其状态分为已通知和未通知。通过详细解释内核对象的状态切换和参数设置,举例说明如何在一个线程写入字符串后,另一个线程安全地追加内容,实现线程间的同步协作。
摘要由CSDN通过智能技术生成

现实程序中有时候我们需要对线程执行顺序更加严格的要求。

前面讲到的关键代码段就不适用了。

关键代码段最大的有点就是用户在用户态执行就可以了,不需要进入内核状态。从而减少了进入内核所用的时间。

所以如果如果能够使用关键代码段就使用关键代码段。

最后选择内核对象进行同步!

事件内核对象是内核对象同步的其中一种。

解释一下内核对象的状态。

内核对象有两种状态:已通知状态和未通知状态。

通俗一点就是:一个线程等待的内核对象时已通知状态就可以进入下一步操作。反之相反。

 

HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, 
BOOL bInitialState, LPTSTR lpName); 

第一个参数:用来设置安全属性的,基本上每一个内核对象都有这个属性,除了一个内核对象(具体是哪一个忘记了)

第二个参数:用来设置是否人工设置时间事件内核对象。

第三个参数:用来设置内核对象的状态

第四个参数:内核对象名字

使用:

第一个、第四个参数在同一进程里面可以忽视。

第二个参数若设置自动状态,那么操作系统会在调用waitforwingleobject(handle_event)之后将handle_event设置为未通知状态。

如果是人工,那么就需要自己设置为未通知状态!

 

 下面给一个例子:

两个线程:一个线程先执行,写入一个字符串到内存里面。

另一个线程等第一个线程执行完之后执行,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值