让我说我正在实现一个关键部分并保护VC中的一些数组,我该如何使用VC中的锁?
您需要
critical sections的API函数:
原文链接:https://www.f2er.com/windows/371773.html> InitializeCriticalSection
从任何线程(通常是主线程)调用一次以初始化锁定.在用它做任何其他事情之前初始化.
> EnterCriticalSection
从任何线程调用以获取锁定.如果另一个线程有锁,它将阻塞,直到它可以获得锁.关键部分是可重入的,这意味着即使线程已经拥有它,线程也会成功获取锁定.
> LeaveCriticalSection
解锁.每次调用EnterCriticalSection都必须与对LeaveCriticalSection的匹配调用配对.不要让异常阻止这些获取/释放呼叫配对.
> DeleteCriticalSection
从任何线程(通常是主线程)调用一次以完成锁定.当没有线程持有锁时执行此操作.在您调用此锁之后,锁无效,您无法再次尝试获取锁.
MSDN有助于提供trivial example.
如果您正在使用MFC,那么您可能会使用CCriticalSection
来封装类中的Win32关键部分API.
至于你如何使用你的阵列.好吧,你的线程一次只能执行一个受锁保护的代码块.您需要使用锁来停止竞争条件,其中两个线程同时尝试读/写同一个内存位置,或者实际上其他更微妙的条件可能会破坏您的算法.
如果您要描述数组,其内容以及如何操作它,那么可能会给您一些具体的建议.究竟如何操作此阵列将对理想的同步策略产生重大影响,在某些情况下,您可以使用无锁方法.