摘要:
C++11 标准中定义了另外一个与 Mutex RAII 相关类 unique_lock,该类与 lock_guard 类相似,也很方便线程对互斥量上锁,但它提供了更好的上锁和解锁控制。 unique_lock 对象以独占所有权的方式( unique owership)管理 mutex 对象的上锁和 阅读全文
posted @ 2024-03-24 23:17
小熊酱
阅读(2063)
评论(0)
推荐(1)
摘要:
std::lock_gurad 是 C++11 中定义的模板类。定义如下: template <class Mutex> class lock_guard; lock_guard 对象通常用于管理某个锁(Lock)对象,因此与 Mutex RAII 相关,方便线程对互斥量上锁,即在某个 lock_g 阅读全文
posted @ 2024-03-24 22:48
小熊酱
阅读(643)
评论(0)
推荐(0)
摘要:
C++中通过实例化 std::mutex 创建互斥量, 通过调用成员函数lock()进行上锁, unlock()进行解锁。 不过, 不推荐实践中直接去调用成员函数, 因为调用成员函数就意味着, 必须记住在每个函数出口都要去调用unlock(), 也包括异常的情况。 C++标准库为互斥量提供了一个RA 阅读全文
posted @ 2024-03-24 22:02
小熊酱
阅读(40)
评论(0)
推荐(0)
摘要:
线程标识类型是 std::thread::id , 可以通过两种方式进行检索。 第一种, 可以通过调用 std::thread 对象的成员函数 get_id() 来直接获取。 如果 std::thread 对象没有与任何执行线程相关联, get_id() 将返回 std::thread::type 阅读全文
posted @ 2024-03-24 21:47
小熊酱
阅读(27)
评论(0)
推荐(0)
摘要:
假设要写一个在后台启动线程的函数, 想通过新线程返回的所有权去调用这个函数, 而不是等待线程结束再去调用; 或完全与之相反的想法: 创建一个线程, 并在函数中转移所有权,都必须要等待线程结束。 总之, 新线程的所有权都需要转移。这就是移动引入 std::thread 的原因。 C++标准库中有很多资 阅读全文
posted @ 2024-03-24 21:40
小熊酱
阅读(45)
评论(0)
推荐(0)
摘要:
向 std::thread 构造函数中的可调用对象, 或函数传递一个参数很简单。 需要注意的是, 默认参数要拷贝到线程独立内存中, 即使参数是引用的形式, 也可以在新线程中进行访问 。 void f(int i, std::string const& s); std::thread t(f, 3, 阅读全文
posted @ 2024-03-24 21:05
小熊酱
阅读(91)
评论(0)
推荐(0)
摘要:
当倾向于在无异常的情况下使用join()时, 需要在异常处理过程中调用join(), 从而避免生命周期的问题。 struct func; // 定义在清单2.1中 void f() { int some_local_state=0; func my_func(some_local_state); s 阅读全文
posted @ 2024-03-24 20:44
小熊酱
阅读(21)
评论(0)
推荐(0)
摘要:
如果不等待线程, 就必须保证线程结束之前, 可访问的数据得有效性。 这种情况很可能发生在线程还没结束, 函数已经退出的时候, 这时线程函数还持有函数局部变量的指针或引用。 struct func { int& i; func(int& i_) : i(i_) {} void operator() ( 阅读全文
posted @ 2024-03-24 20:41
小熊酱
阅读(21)
评论(0)
推荐(0)
摘要:
线程在 std::thread 对象创建(为线程指定任务)时启动。 最简单的情况下, 任务也会很简单, 通常是无参数无返回(void-returning)的函数 。 使用C++线程库启动线程, 可以归结为构造 std::thread 对象: void do_some_work(); std::thr 阅读全文
posted @ 2024-03-24 20:32
小熊酱
阅读(37)
评论(0)
推荐(0)

浙公网安备 33010602011771号