如何在VC++中创建锁?

Arj*_*gri 2 windows winapi multithreading visual-c++ locks

可以说我正在实现一个关键部分并在VC++中保护一些数组,我如何使用VC++中的锁来实现呢?

Dav*_*nan 10

您需要关键部分的API函数:

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

MSDN有助于提供一个简单的例子.

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

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

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