加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 如何在VC中创建锁?

发布时间:2020-12-13 20:31:13 所属栏目:Windows 来源:网络整理
导读:让我说我正在实现一个关键部分并保护VC中的一些数组,我该如何使用VC中的锁? 您需要 critical sections的API函数: InitializeCriticalSection 从任何线程(通常是主线程)调用一次以初始化锁定.在用它做任何其他事情之前初始化. EnterCriticalSection 从任何
让我说我正在实现一个关键部分并保护VC中的一些数组,我该如何使用VC中的锁?
您需要 critical sections的API函数:

> InitializeCriticalSection从任何线程(通常是主线程)调用一次以初始化锁定.在用它做任何其他事情之前初始化.
> EnterCriticalSection从任何线程调用以获取锁定.如果另一个线程有锁,它将阻塞,直到它可以获得锁.关键部分是可重入的,这意味着即使线程已经拥有它,线程也会成功获取锁定.
> LeaveCriticalSection解锁.每次调用EnterCriticalSection都必须与对LeaveCriticalSection的匹配调用配对.不要让异常阻止这些获取/释放呼叫配对.
> DeleteCriticalSection从任何线程(通常是主线程)调用一次以完成锁定.当没有线程持有锁时执行此操作.在您调用此锁之后,锁无效,您无法再次尝试获取锁.

MSDN有助于提供trivial example.

如果您正在使用MFC,那么您可能会使用CCriticalSection来封装类中的Win32关键部分API.

至于你如何使用你的阵列.好吧,你的线程一次只能执行一个受锁保护的代码块.您需要使用锁来停止竞争条件,其中两个线程同时尝试读/写同一个内存位置,或者实际上其他更微妙的条件可能会破坏您的算法.

如果您要描述数组,其内容以及如何操作它,那么可能会给您一些具体的建议.究竟如何操作此阵列将对理想的同步策略产生重大影响,在某些情况下,您可以使用无锁方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读