
C++多线程编程学习笔记
C++多线程编程学习笔记
SensizliKLoU
这也想学,那也想学,但又啥都不会的车辆工程专业智能网联汽车小垃圾。。!
展开
-
【C++多线程编程】(十)之 lock_guard与unique_lock的区别
所有 lock_guard 能够做到的事情,都可以使用 unique_lock 做到,反之则不然。那么何时使lock_guard呢?很简单,需要使用锁的时候,首先考虑使用 lock_guard,因为lock_guard是最简单的锁。提供了更灵活的上锁和解锁方式。它在构造时可以选择是否上锁,而在析构时会根据构造时的状态决定是否解锁。这种方式允许在锁住的期间手动解锁,并在需要时手动重新上锁,提供了更大的灵活性。适用于需要在进入临界区时锁住互斥量,但在一些条件下可能需要提前解锁,然后重新锁定互斥量的复杂场景。原创 2023-12-25 12:39:21 · 1327 阅读 · 2 评论 -
【C++多线程编程】(九)之 死锁(deadlock)及如何避免
死锁(Deadlock)是多线程或多进程并发编程中一种常见的问题,它发生在两个或多个线程(或进程)互相等待对方释放资源,导致所有参与的线程都无法继续执行的状态。死锁是一个需要仔细设计和管理的问题,因此在编写多线程或多进程的程序时,需要谨慎地考虑资源的获取和释放顺序,以及采取适当的同步机制来避免死锁的发生。典型的死锁场景涉及多个资源和多个线程,并且每个线程都在等待其他线程释放资源。是 C++ 标准库中的一个函数模板,用于将一个对象包装成一个引用,从而能够在函数调用中传递引用语义而不是传值语义。原创 2023-12-25 09:00:00 · 989 阅读 · 0 评论 -
【C++多线程编程】(八)之 详解trylock ( )
尝试获取互斥量的锁,如果成功获取,则执行一些对共享资源的操作,并在最后手动解锁。如果没有成功获取锁,程序输出失败消息。这种方式适用于需要在获取锁之前检查锁的状态的场景。,该函数用于尝试上锁,但如果锁已经被其他线程占用,则不会阻塞当前线程,而是会立即返回。这使得我们可以根据返回值来判断互斥量是否已经被其他线程锁住。如果当前线程成功获取了锁,它会返回。类型的互斥量提供了一个成员函数。原创 2023-12-23 10:00:00 · 1458 阅读 · 1 评论 -
【C++多线程编程】(七)之 详解互斥量mutex、上锁lock、解锁unlock
在多线程环境中,多个线程可能同时访问共享的数据,如果没有适当的同步机制,就会导致数据不一致或产生其他问题。)是一种用于实现线程同步的机制,用于保护共享资源免受并发访问的机制,以防止多个线程同时访问或修改相同的数据而引发竞态条件(Race Condition)。当一个线程获得互斥量的锁时,其他线程尝试获取锁将会被阻塞,直到持有锁的线程解锁。上锁是指在访问共享资源之前,通过互斥量锁住资源,确保只有一个线程能够进入临界区,从而防止其他线程同时访问相同的资源。手动解锁,执行一些不需要互斥量保护的代码,最后通过。原创 2023-12-23 09:00:00 · 740 阅读 · 0 评论 -
【C++多线程编程】(六)之 this_thread线程ID获取get_id()、线程休眠sleep_for()|sleep_until()、线程执行权yield()学习
的主要场景是在多线程编程中,当一个线程希望让出 CPU 执行权,以便其他线程能够执行。是 C++ 标准库中提供的一个命名空间,它包含了与当前线程相关的功能。是 C++ 标准库中的一个函数,它的作用是让当前线程放弃其执行权,主动让出 CPU 时间片,以便其他线程有机会执行。用于让当前线程休眠直到指定的时间点。该函数接受一个表示时间点的参数,并在当前线程休眠直到达到或超过该时间点。函数的调用会导致当前线程进入就绪态,允许调度器在就绪线程中选择另一个线程来执行。被用来休眠当前线程至指定的时间点。原创 2023-12-22 09:00:00 · 2407 阅读 · 1 评论 -
【C++多线程编程】(五)之 线程生命周期管理join() 与 detach()
这种阻塞行为是为了协调不同线程之间的执行顺序,以避免并发问题或确保线程的执行顺序符合程序的逻辑。方法时,调用线程将被阻塞,直到被调用的线程执行完成。当被分离的线程运行结束时,其资源(如线程的栈空间等)会被自动释放,不需要手动调用。被分离的线程将在后台运行,即使主线程退出,被分离的线程仍然可以继续执行。后,主线程不再等待被分离的线程执行完成,而是让它在后台运行。等待线程的完成,以避免可能的资源泄漏和其他难以调试的问题。方法时,需要确保主线程不再依赖于被分离的线程的执行。之前检查线程的状态,以确保线程在调用。原创 2023-12-21 15:34:11 · 1918 阅读 · 1 评论 -
【C++多线程编程】(四)之 创建线程方式
带来的线程分离可能会导致一些问题,如在主线程退出时新线程仍在运行,可能导致资源泄漏等。在实际应用中,最好使用。将新线程和主线程分离。分离后,主线程将不再等待新线程的完成,新线程将在后台运行,直到它完成为止。执行完毕,然后再继续执行主线程的代码。尽管这是一种创建没有命名线程的方式,但请注意,或其他合适的线程管理机制确保线程的正常结束。是一个线程同步的操作,它会让主线程等待。将函数添加到线程中,并传入相应的参数即可。函数会阻塞主线程,直到调用。直接创建线程,没有名字。main函数是主线程。原创 2023-12-21 15:32:11 · 583 阅读 · 0 评论 -
【C++多线程编程】(三)之详解lock_guard
在这个例子中,std::lock_guard 对象 lock 的作用是确保在 sharedResourceFunction 函数中对共享资源的访问是线程安全的。自动上锁和解锁: 在 std::lock_guard 对象的构造函数中,互斥锁会被自动上锁,而在析构函数中,互斥锁会被自动解锁。这确保了在作用域内互斥锁一直是被锁住的状态,从而防止了忘记手动释放锁的错误。std::lock_guard 的主要作用是在多线程环境中简化互斥锁的使用,通过RAII(资源获取即初始化)方式确保在作用域内对互斥锁的安全管理。原创 2023-12-17 13:46:30 · 1069 阅读 · 1 评论 -
【C++多线程编程】(二)之详解锁(lock)和解锁(unlock)
在C++多线程编程中,锁(lock)和解锁(unlock)通常用于管理共享资源的访问,以防止多个线程同时对资源进行修改,从而避免竞态条件(Race Condition)和数据不一致性问题。C++标准库提供了一些工具来实现锁,其中最常用的是互斥锁(std::mutex)和锁卫士(std::lock_guard)。:这一行创建了一个 std::lock_guard 对象,它在构造时锁住 myMutex,在析构时释放锁。总体而言,这个例子演示了如何使用互斥锁和锁卫士确保多个线程对共享资源的安全访问。原创 2023-12-17 13:40:29 · 1317 阅读 · 0 评论 -
【C++多线程编程】(一)之详解互斥量mutex
当一个线程获得互斥量的锁时,其他线程尝试获取锁将会被阻塞,直到持有锁的线程解锁。mutex 是互斥量(Mutex)的缩写,是一种用于多线程编程的同步机制。互斥量是一种用于保护共享资源免受并发访问的机制,以防止多个线程同时修改相同的数据而引发竞态条件(Race Condition)。在多线程环境中,多个线程可能同时访问共享的数据,如果没有适当的同步机制,就会导致数据不一致或产生其他问题。在上述示例中,std::mutex 用于创建一个互斥量,std::lock_guard 则用于在作用域结束时自动释放锁。原创 2023-12-15 15:00:13 · 727 阅读 · 1 评论