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.
至于你如何使用你的阵列.好吧,你的线程一次只能执行一个受锁保护的代码块.您需要使用锁来停止竞争条件,其中两个线程同时尝试读取/写入同一内存位置,或者实际上其他更微妙的条件可能会破坏您的算法.
如果您要描述数组,其内容以及如何操作它,那么可能会给您一些具体的建议.究竟如何操作此阵列将对理想的同步策略产生重大影响,在某些情况下,您可以使用无锁方法.
| 归档时间: |
|
| 查看次数: |
3093 次 |
| 最近记录: |