it 网站模板,免费咨询肾病专家,食品网站建设案例,成都彭超艺术设计有限公司1.lock_guard lock_guard是C的stl库中的一种互斥量封装嘞#xff0c;用于保护共享数据#xff0c;防止多个线程同时访问同一资源而导致的数据竞争问题。#xff0c;其包括以下成员函数#xff1a;
函数名作用lock尝试对互斥量进行加锁#xff0c;如果当前互斥量已经被其他…1.lock_guard lock_guard是C的stl库中的一种互斥量封装嘞用于保护共享数据防止多个线程同时访问同一资源而导致的数据竞争问题。其包括以下成员函数
函数名作用lock尝试对互斥量进行加锁如果当前互斥量已经被其他线程所拥有则当前线程被阻塞直到互斥量被成功加锁try_ lock尝试对互斥量进行加锁如果当前互斥量已经被其他线程持有则返回false否则返回truetry_ lock_for尝试对互斥量进行加锁如果当前互斥量已经被其他线程持有则当前线程阻塞直到互斥量被成功加锁或者超过指定时间try_ lock_until尝试对互斥量进行加锁如果当前互斥量已经被其他线程持有则当前线程阻塞直到互斥量被成功加锁或者超过指定时间 当构造函数被调用时该互斥量会被自动锁定当析构函数被调用时该该互斥量会被自动解锁因此该对象不能复制或移动只能在局部作用域中作用 lock()和unlock()操作等同于lock_guard的构造函数和析构函数 #include iostream
#include thread
#include mutexstatic std::mutex gmutex;void TestLockGuard(int i)
{std::lock_guardstd::mutex lock(gmutex);std::cout In i std::endl;std::this_thread::sleep_for(std::chrono::microseconds(500));
}int main()
{for (int i 0; i 3; i){std::thread th(TestLockGuard, i 1);th.detach();}getchar();return 0;
}2.unique_lock
unique_lock是C的stl库中提供的一个互斥量封装类用于在多线程程序中对互斥量进行加锁或解锁操作。它的主要特点是可以对互斥量进行更加灵活的管理包括延迟加锁条件变量、超时等其包括以下成员函数
函数名作用unlock对互斥量解锁adopt_lock已经拥有锁不加锁出栈区会释放defer_lock延后拥有不加锁出栈区不释放try_to_lock尝试获取互斥的所有权而不阻塞获取失败退出栈区不会释放通过owns_lock函数判断
3.shared_lock共享锁包装器(c14)
static std::shared_time_mutux tmux;//共享锁实例化
//读取锁
{std::shared_lockstd::shared_time_mutux lock(tmux);//调用共享锁std::coutread data:std::endl://退出栈区释放共享锁
}
//写入锁
{std::unique_lockstd::shared_time_mutux lock(tmux);std::coutwrite data:std::endl://退出栈区释放共享锁
}4.scoped_lock避免死锁(c17)
std::mutux mux1mux2;
std::scoped_lock(mux1,mux2);