std::lock
是C++标准库中的一个函数,用于同时锁定多个互斥锁,以避免死锁和提高并发性能。它的设计目的是为了解决多个互斥锁的死锁问题。
在实现上,std::lock
函数使用了一种叫做"锁的层级化"的技术,而不是全局排序锁定互斥锁。全局排序锁定互斥锁是一种简单的方法,它要求所有线程按照某种全局顺序来获取互斥锁,以避免死锁。然而,这种方法存在一些问题。
首先,全局排序锁定互斥锁会引入额外的开销。因为所有线程都必须按照全局顺序来获取互斥锁,这就需要维护一个全局的锁定顺序,而且每次获取互斥锁都需要检查这个顺序。这会增加锁的竞争和系统开销。
其次,全局排序锁定互斥锁会限制并发性能。因为所有线程都必须按照全局顺序来获取互斥锁,这就导致了所有线程之间的串行化。如果一个线程在获取互斥锁时被阻塞,那么其他线程也必须等待,即使它们之间没有竞争关系。这会降低系统的并发性能。
相比之下,std::lock
函数使用了一种更高效的层级化锁定策略。它会根据互斥锁的地址来确定锁的层级关系,并按照层级顺序来获取互斥锁。这样可以避免全局排序锁定互斥锁的开销和并发性能问题。
总结起来,std::lock
不使用全局排序锁定互斥锁的原因是为了避免额外的开销和限制并发性能。它采用了一种更高效的层级化锁定策略,以解决多个互斥锁的死锁问题。
领取专属 10元无门槛券
手把手带您无忧上云