Mutex的lock(), tryLock()区别
2016-10-06 11:49
239 查看
lock函数和tryLock函数都是用于锁定对象,但他们之间有一定的区别:
lock函数是阻塞的,因为它调用WaitForSingleObject函数时传递的第二个参数是INFINITE,表示无限等待下去,所以是阻塞的。
tryLock函数时非阻塞的,调用后立即返回。因为它调用WaitForSingleObject函数时传递的第二个参数是0,表示不等待,立即返回。
调用lock或者tryLock后,都需要调用unlock来解锁。
WaitForSingleObject函数的用法如下:
DWORD WaitForSingleObject
(
HANDLE hObject, //指明一个内核对象的句柄
DWORD dwMilliseconds //等待时间
);
该函数需要传递一个内核对象句柄,该句柄标识一个内核对象,
如果该内核对象处于未通知状态,则该函数导致线程进入阻塞状态;
如果该内核对象处于已通知状态,则该函数立即返回WAIT_OBJECT_0。
第二个参数指明了需要等待的时间(毫秒),可以传递INFINITE指明要无限期等待下去,
如果第二个参数为0,那么函数就测试同步对象的状态并立即返回。
如果等待超时,该函数返回WAIT_TIMEOUT。
如果该函数失败,返回WAIT_FAILED。
原地址:http://blog.csdn.net/weiwangchao_/article/details/7938892
lock函数是阻塞的,因为它调用WaitForSingleObject函数时传递的第二个参数是INFINITE,表示无限等待下去,所以是阻塞的。
tryLock函数时非阻塞的,调用后立即返回。因为它调用WaitForSingleObject函数时传递的第二个参数是0,表示不等待,立即返回。
调用lock或者tryLock后,都需要调用unlock来解锁。
status_t Mutex::lock() { DWORD dwWaitResult; dwWaitResult = WaitForSingleObject((HANDLE) mState, INFINITE); return dwWaitResult != WAIT_OBJECT_0 ? -1 : NO_ERROR; } void Mutex::unlock() { if (!ReleaseMutex((HANDLE) mState)) LOG(LOG_WARN, "thread", "WARNING: bad result from unlocking mutex\n"); } status_t Mutex::tryLock() { DWORD dwWaitResult; dwWaitResult = WaitForSingleObject((HANDLE) mState, 0); if (dwWaitResult != WAIT_OBJECT_0 && dwWaitResult != WAIT_TIMEOUT) LOG(LOG_WARN, "thread", "WARNING: bad result from try-locking mutex\n"); return (dwWaitResult == WAIT_OBJECT_0) ? 0 : -1; }
WaitForSingleObject函数的用法如下:
DWORD WaitForSingleObject
(
HANDLE hObject, //指明一个内核对象的句柄
DWORD dwMilliseconds //等待时间
);
该函数需要传递一个内核对象句柄,该句柄标识一个内核对象,
如果该内核对象处于未通知状态,则该函数导致线程进入阻塞状态;
如果该内核对象处于已通知状态,则该函数立即返回WAIT_OBJECT_0。
第二个参数指明了需要等待的时间(毫秒),可以传递INFINITE指明要无限期等待下去,
如果第二个参数为0,那么函数就测试同步对象的状态并立即返回。
如果等待超时,该函数返回WAIT_TIMEOUT。
如果该函数失败,返回WAIT_FAILED。
原地址:http://blog.csdn.net/weiwangchao_/article/details/7938892
相关文章推荐
- Mutex的lock(), tryLock()区别
- lock Mutex Monitor 之间的区别与详解, .net 多线程 同步异步操作,锁
- spin_lock & mutex_lock的区别?
- spin_lock & mutex_lock的区别? .
- spin_lock & mutex_lock的区别? 【转】
- 【转】spin_lock & mutex_lock的区别? .
- lock vs Monitor vs Mutex之间的区别
- spin_lock & mutex_lock的区别? .
- spin_lock & mutex_lock的区别
- spin_lock & mutex_lock的区别?
- lock,Monitor,Mutex的区别
- spin_lock & mutex_lock的区别
- spin_lock & mutex_lock的区别
- spin_lock & mutex_lock的区别
- spin_lock & mutex_lock的区别?
- linux c pthread_mutex_lock和pthread_mutex_trylock对比
- Mutex的lock(), unlock(), tryLock()函数介绍
- lock Mutex Monitor 之间的区别与详解, .net 多线程 同步异步操作,锁
- mutex_lock&spin_lock和信号量区别
- spin_lock & mutex_lock的区别? .