上面介绍的所有的锁,都带有超时版本。即timed_mutex,recursive_timed_mutex,shared_timed_mutex。他们使用时,和普通版本类似,不过try_lock方法多了两个超时的版本try_lock_for和try_lock_until。调用这一函数时,如果锁已经被获取了,线程将会阻塞一段时间,如果这一段时间内,获取到了锁则返回true,否则返回false
这里我们只介绍timed_mutex,其他的类似。
void thread_func(int thread_id) { if (!g_mutex.try_lock_for(0.5s)) return; std::cout << "Thread out 1: " << thread_id << std::endl;; std::this_thread::sleep_for(1s); std::cout << "Thread out 2: " << thread_id << std::endl;; g_mutex.unlock(); g_mutex.native_handle(); }其输出为:
可以看到,这里只有一个线程有输出,另一个线程,在等待0.5s后直接退出了(没有获取到锁)。
总结本文主要介绍了三种不同的锁,普通锁,递归锁,读写锁。三个锁有着不一样的使用方法,但是可以确定的是,过多的使用锁,会导致程序中的串行部分过多,并行效果不好。因此对于锁的使用,需要尽量的克制,尽量的合理。