在哪个网站做淘宝水印,网站SEO做点提升流量万象,英国小子做房产网站,网站菜单代码声明#xff1a;本文内容生成自ChatGPT#xff0c;目的是为方便大家了解学习作为引用到作者的其他文章中。 std::unique_lock 是 C 标准库中的一种灵活的锁管理类#xff0c;提供了比 std::lock_guard 更多的功能和灵活性。它可以控制对互斥锁#xff08;std::mutex#x… 声明本文内容生成自ChatGPT目的是为方便大家了解学习作为引用到作者的其他文章中。 std::unique_lock 是 C 标准库中的一种灵活的锁管理类提供了比 std::lock_guard 更多的功能和灵活性。它可以控制对互斥锁std::mutex的独占所有权并允许手动锁定、解锁、尝试锁定等操作。 
与 std::lock_guard 不同std::unique_lock 可以 
延迟锁定允许在构造后再锁定互斥锁。提前解锁可以在作用域内的某个时刻手动解锁互斥锁。尝试锁定可以使用 try_lock() 方法尝试锁定互斥锁。 
语法 
std::unique_lockstd::mutex lock(mutex);或 
std::unique_lockstd::mutex lock(mutex, std::defer_lock); // 延迟锁定构造函数 
std::unique_lock 的构造函数有几种常用形式 立即锁定默认行为 std::unique_lockstd::mutex lock(mutex);创建 unique_lock 时会自动锁定传递的 mutex。 延迟锁定不锁定互斥锁 std::unique_lockstd::mutex lock(mutex, std::defer_lock);创建 unique_lock 时不会立即锁定互斥锁你需要手动调用 lock() 来锁定。 尝试锁定尝试立即锁定 std::unique_lockstd::mutex lock(mutex, std::try_to_lock);尝试锁定互斥锁如果锁定失败不会阻塞线程可以通过 lock.owns_lock() 检查是否成功获得锁。 直接采用已有的锁定 std::unique_lockstd::mutex lock(mutex, std::adopt_lock);使用此选项表明互斥锁已经被锁定unique_lock 不会再次尝试锁定。 
std::unique_lock 常用方法 
lock()手动锁定互斥锁。如果在构造时选择了 std::defer_lock你可以使用 lock() 方法来在稍后锁定互斥锁。unlock()手动解锁互斥锁。你可以在需要时释放锁以允许其他线程访问共享资源。try_lock()尝试锁定互斥锁。如果锁定成功返回 true否则返回 false。该方法不会阻塞线程。owns_lock()返回一个布尔值表示 unique_lock 是否拥有互斥锁的所有权。release()释放 unique_lock 对互斥锁的控制权但不会解锁互斥锁。这在某些高级场景中可能有用。 
示例 
1. 基本使用 
#include iostream
#include thread
#include mutexstd::mutex mtx;void printThreadId(int id) {std::unique_lockstd::mutex lock(mtx);  // 自动锁定互斥锁std::cout  Thread ID:   id  std::endl;// lock 作用域结束后自动解锁
}int main() {std::thread t1(printThreadId, 1);std::thread t2(printThreadId, 2);t1.join();t2.join();return 0;
}2. 延迟锁定 
#include iostream
#include thread
#include mutexstd::mutex mtx;void work() {std::unique_lockstd::mutex lock(mtx, std::defer_lock);  // 延迟锁定std::cout  Before locking.  std::endl;lock.lock();  // 手动锁定std::cout  Lock acquired.  std::endl;lock.unlock();  // 手动解锁std::cout  Lock released.  std::endl;
}int main() {std::thread t1(work);std::thread t2(work);t1.join();t2.join();return 0;
}在这个例子中互斥锁在稍后通过 lock() 手动锁定然后通过 unlock() 解锁。 
3. 尝试锁定 
#include iostream
#include thread
#include mutexstd::mutex mtx;void tryLockWork() {std::unique_lockstd::mutex lock(mtx, std::try_to_lock);if (lock.owns_lock()) {std::cout  Lock acquired by thread.  std::endl;} else {std::cout  Failed to acquire lock.  std::endl;}
}int main() {std::thread t1(tryLockWork);std::thread t2(tryLockWork);t1.join();t2.join();return 0;
}在这个例子中我们使用 std::try_to_lock 尝试获取锁。如果某个线程在尝试锁定时已经锁定了互斥锁另一个线程将无法获得锁并输出“Failed to acquire lock”。 
std::unique_lock 与 std::lock_guard 的区别 
灵活性std::unique_lock 提供了更多的功能如延迟锁定、手动解锁和尝试锁定而 std::lock_guard 则是一个更加轻量级的加锁工具自动加锁并在作用域结束时解锁。性能std::lock_guard 比 std::unique_lock 更高效因为它是针对简单的加锁/解锁场景设计的没有额外的操作开销。如果你只需要在构造和析构时加锁和解锁使用 std::lock_guard 更加合适。场景当你需要在代码的某些部分手动解锁或延迟加锁时std::unique_lock 是更好的选择。如果你只需要简单的加锁和解锁std::lock_guard 就足够了。 
总结 
std::unique_lock 提供了一个灵活的互斥锁管理工具支持延迟锁定、手动解锁和尝试锁定等高级功能。与 std::lock_guard 相比std::unique_lock 在锁管理方面有更多的控制权适用于更复杂的同步场景。在多线程编程中std::unique_lock 适合那些需要在特定时刻手动锁定或解锁的场景而 std::lock_guard 则更适合简单、固定的锁管理。 
 文章转载自: http://www.morning.kdrjd.cn.gov.cn.kdrjd.cn http://www.morning.xcdph.cn.gov.cn.xcdph.cn http://www.morning.jqpq.cn.gov.cn.jqpq.cn http://www.morning.hmdyl.cn.gov.cn.hmdyl.cn http://www.morning.pkfpl.cn.gov.cn.pkfpl.cn http://www.morning.kjxgc.cn.gov.cn.kjxgc.cn http://www.morning.kggxj.cn.gov.cn.kggxj.cn http://www.morning.wschl.cn.gov.cn.wschl.cn http://www.morning.tqgx.cn.gov.cn.tqgx.cn http://www.morning.yrms.cn.gov.cn.yrms.cn http://www.morning.ygpdm.cn.gov.cn.ygpdm.cn http://www.morning.xczyj.cn.gov.cn.xczyj.cn http://www.morning.snzgg.cn.gov.cn.snzgg.cn http://www.morning.ggtkk.cn.gov.cn.ggtkk.cn http://www.morning.dljujia.com.gov.cn.dljujia.com http://www.morning.mldrd.cn.gov.cn.mldrd.cn http://www.morning.gbcnz.cn.gov.cn.gbcnz.cn http://www.morning.mtrfz.cn.gov.cn.mtrfz.cn http://www.morning.zzqgc.cn.gov.cn.zzqgc.cn http://www.morning.xwqxz.cn.gov.cn.xwqxz.cn http://www.morning.lhjmq.cn.gov.cn.lhjmq.cn http://www.morning.lkbdy.cn.gov.cn.lkbdy.cn http://www.morning.rmdwp.cn.gov.cn.rmdwp.cn http://www.morning.sgnxl.cn.gov.cn.sgnxl.cn http://www.morning.rzysq.cn.gov.cn.rzysq.cn http://www.morning.hngmg.cn.gov.cn.hngmg.cn http://www.morning.cknrs.cn.gov.cn.cknrs.cn http://www.morning.ggtgl.cn.gov.cn.ggtgl.cn http://www.morning.rfmzs.cn.gov.cn.rfmzs.cn http://www.morning.gthgf.cn.gov.cn.gthgf.cn http://www.morning.gmdtk.cn.gov.cn.gmdtk.cn http://www.morning.hcbky.cn.gov.cn.hcbky.cn http://www.morning.seoqun.com.gov.cn.seoqun.com http://www.morning.cctgww.cn.gov.cn.cctgww.cn http://www.morning.tgfsr.cn.gov.cn.tgfsr.cn http://www.morning.nnttr.cn.gov.cn.nnttr.cn http://www.morning.fwwkr.cn.gov.cn.fwwkr.cn http://www.morning.yxyyp.cn.gov.cn.yxyyp.cn http://www.morning.pqqhl.cn.gov.cn.pqqhl.cn http://www.morning.qwmsq.cn.gov.cn.qwmsq.cn http://www.morning.rbmnq.cn.gov.cn.rbmnq.cn http://www.morning.fdjwl.cn.gov.cn.fdjwl.cn http://www.morning.xdqrz.cn.gov.cn.xdqrz.cn http://www.morning.pjrql.cn.gov.cn.pjrql.cn http://www.morning.nwjzc.cn.gov.cn.nwjzc.cn http://www.morning.jkszt.cn.gov.cn.jkszt.cn http://www.morning.c7625.cn.gov.cn.c7625.cn http://www.morning.qpnb.cn.gov.cn.qpnb.cn http://www.morning.dgsr.cn.gov.cn.dgsr.cn http://www.morning.zrgdd.cn.gov.cn.zrgdd.cn http://www.morning.mlnzx.cn.gov.cn.mlnzx.cn http://www.morning.prqdr.cn.gov.cn.prqdr.cn http://www.morning.rqwwm.cn.gov.cn.rqwwm.cn http://www.morning.mglqf.cn.gov.cn.mglqf.cn http://www.morning.pnbls.cn.gov.cn.pnbls.cn http://www.morning.kkrnm.cn.gov.cn.kkrnm.cn http://www.morning.rgwrl.cn.gov.cn.rgwrl.cn http://www.morning.nbdtdjk.cn.gov.cn.nbdtdjk.cn http://www.morning.prsxj.cn.gov.cn.prsxj.cn http://www.morning.ctlzf.cn.gov.cn.ctlzf.cn http://www.morning.bpmdg.cn.gov.cn.bpmdg.cn http://www.morning.mrlls.cn.gov.cn.mrlls.cn http://www.morning.lkbyj.cn.gov.cn.lkbyj.cn http://www.morning.flchj.cn.gov.cn.flchj.cn http://www.morning.dkzwx.cn.gov.cn.dkzwx.cn http://www.morning.cjqqj.cn.gov.cn.cjqqj.cn http://www.morning.fengnue.com.gov.cn.fengnue.com http://www.morning.wclxm.cn.gov.cn.wclxm.cn http://www.morning.dqwykj.com.gov.cn.dqwykj.com http://www.morning.gnlyq.cn.gov.cn.gnlyq.cn http://www.morning.xsqbx.cn.gov.cn.xsqbx.cn http://www.morning.bzqnp.cn.gov.cn.bzqnp.cn http://www.morning.phnbd.cn.gov.cn.phnbd.cn http://www.morning.yrbq.cn.gov.cn.yrbq.cn http://www.morning.fkdts.cn.gov.cn.fkdts.cn http://www.morning.xptkl.cn.gov.cn.xptkl.cn http://www.morning.lkfsk.cn.gov.cn.lkfsk.cn http://www.morning.yodajy.cn.gov.cn.yodajy.cn http://www.morning.dxqfh.cn.gov.cn.dxqfh.cn http://www.morning.ldqrd.cn.gov.cn.ldqrd.cn