c++多线程
lysSuper
这个作者很懒,什么都没留下…
展开
-
c++多线程, lock/try_lock/once_flag/ call_once
std::locktemplate<class Mutex1, class Mutex2, class ... Mutexes> void lock(Mutex1& a, Mutex2& b, Mutexes&... cde);锁定作为参数传进来的对象,如果有必要调用线程进行阻塞;std::lock通过使用lock、try_lock、unlock来锁定对象,返回之前确保所有的对象都上锁,并且没有产生死锁如果不能锁定所有对象,在失败之前会前之前成功...原创 2020-06-02 21:24:44 · 609 阅读 · 0 评论 -
c++多线程,adopt_lock_t/defer_lock_t/try_to_lock_t
std::adopt_lock_tstruct adopt_lock_t {};constexpr adopt_lock_t adopt_lock {};是一个空类,作为adopt_lock类型对unique_lock or lock_guard的建造含糊,将adopt_lock作为参数传递,使object不要锁互斥量,并且假定互斥量已经被当前线程锁住std::defer_lock_tstruct defer_lock_t {};是一个空类,used as the type原创 2020-05-31 22:56:21 · 2425 阅读 · 0 评论 -
c++多线程,unique_lock
template<class Mutex> class unique_lock;unique_lock不管时锁定还是非锁定状态,unique_lock对互斥量有唯一ownership;在构建或通过移动构造,unique lock获得互斥量,并对该互斥量的lock/unlock负责;该类保证在销毁时处于解锁状态,因此对于有自动持续时间的对象特别有用,因为它可以确保在抛出异常情况下,互斥对象已正确解锁;mutex_type* mutex() const noexcept;返回原创 2020-05-31 22:25:57 · 217 阅读 · 0 评论 -
c++多线程,lock_guard
template<class Mutex> class lock_guard;lock_guard是一个一直使互斥量锁定的管理锁对象;在构建阶段,互斥量被调用线程锁定,在析构阶段,锁unlockedlock_guard是最简单的锁,对具有自动持续时间的对象特别有用,该i持续时间能一直持续到上下文结束; #include <iostream> #include <mutex> #include <thread> #include.原创 2020-05-31 18:05:52 · 226 阅读 · 0 评论 -
c++多线程,timed_mutex
timed_mutexconstructorconstexpr timed_mutex() no_exception; //object unlock statetimed_mutex(const timed_mutex&) = delete; //不能拷贝或移动拷贝构建过程不是原子操作,所以在构建过程可能会出现data race;void lock(); void unlock(); bool try_lock();和mutex的lock/unlock/tyr_lock同;原创 2020-05-31 17:44:32 · 337 阅读 · 0 评论 -
c++多线程,mutex/recursive_mutex锁
对于mutex使用锁有三种情况,1、任何线程都没有使用mutex, 则调用的线程使用mutex2、有其他线程使用mutex,当前调用的线程会阻塞,直到其他使用锁的线程锁释放3、如果mutex被同一线程调用,会产生死锁;如果发生死锁, 会出现无定义行为,在某些特定库实现中,死锁会导致函数调用失败;如果调用失败,会产生一个system_error产生错误的条件有errc::resource_deadlock_world_occur,errc::operation_not_p.原创 2020-05-31 10:34:47 · 1803 阅读 · 0 评论