2011-08-01 31 views
2

锁定在并行线程库,可以发现非阻塞功能:尝试在Windows

int pthread_mutex_trylock(pthread_mutex_t *mutex); 

我可以找到Windows类似的东西?

回答

4

如果您使用的是锁的关键部分,则相当于TryEnterCriticalSection()

如果您正在使用互斥锁进行锁定,则相当于调用WaitForSingleObject(),并将0作为超时值。

如果您不熟悉Windows同步对象,请不要因为它拥有您最熟悉的pthreads背景名称而更喜欢互斥体。只要您的同步处于流程中,关键部分的效率更高,更易于使用。

+0

David Heffernan:我可以在不同的进程中使用TryEnterCriticalSection()吗?不是线程? – yeap

+0

@yeap关键部分不适用于各个进程。对于跨进程锁,您需要[互斥](http://msdn.microsoft.com/en-us/library/ms686927(v = VS.85).aspx)。 –

+0

请注意,对于调用线程已拥有该锁的情况,pthread_mutex_trylock和TryEnterCriticalSection之间的返回行为不同。在这两种实现中,您稍后拥有锁,但返回码不同。有三个先决条件(没有人拥有它,我们拥有它,有人拥有它)和两个最终状态(我们拥有它,或者我们不拥有)通过两种不同的可能行为(我们锁定它,或者我们没有锁定它)。如果另一个线程拥有关键部分,则TryEnterCriticalSection返回零。如果任何线程拥有互斥锁,pthread_mutex_trylock将返回非零值。啊。 – mabraham