`
aigo
  • 浏览: 2644664 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

[C++]boost::unique_lock与boost::lock_guard区别

阅读更多

关键字:thead、多线程、锁

 

lock_guard

boost::mutex mutex;
boost::lock_guard<boost::mutex> lock(mutex);

 

unique_lock

boost::mutex mutex;
boost::unique_lock<boost::mutex> lock(mutex);

 

  • 如果只是为了保证数据同步,那么lock_guard完全够用;
  • 如果除了同步,还需要使用condition进行阻塞时,那么就需要用unique_lock
  • boost还要一个boost::mutex::scoped_lock,这个是boost::unique_lock<boost::mutex>的typedef,在C++11中已经禁用。

 

参考:

boost::unique_lock vs boost::lock_guard

http://stackoverflow.com/questions/6731027/boostunique-lock-vs-boostlock-guard

 

分享到:
评论

相关推荐

    boost.thread.1.3.5中文翻译

    - **锁类型的公共实现**:锁被实现为公共可访问的模板,如`boost::lock_guard`、`boost::unique_lock`、`boost::shared_lock`和`boost::upgrade_lock`,增强了互斥类型的使用灵活性。 #### 接口变更 - `boost::try_...

    C++基于消息队列的多线程实现示例代码

    std::lock_guard 是 C++11 中定义的模板类,用于管理某个锁(Lock)对象。它与 Mutex RAII 相关,方便线程对互斥量上锁。在某个 lock_guard 对象的声明周期内,它所管理的锁对象会一直保持上锁状态;而 lock_guard ...

    boost线程指南手册

    - **`unique_lock`**:更灵活的锁定策略,支持延时锁定、超时等待等高级功能。 - **`shared_lock`**:用于读取共享资源,允许多个线程同时持有。 - **`upgrade_lock`**:用于从读取权限升级到独占权限的场景。 ### ...

    Boost_thread库例程

    3. **线程同步工具**:`boost::lock_guard`和`boost::unique_lock`是智能指针,用于自动管理互斥量的锁定和解锁,避免死锁。`boost::this_thread::sleep`函数可以让当前线程休眠指定的时间。 4. **线程间的通信**:...

    C++实现线程锁

    在代码中,你可以使用`lock()`、`unlock()`和`std::lock_guard`来管理锁的获取和释放。`std::lock_guard`是一个智能指针,可以自动在作用域结束时解锁,防止死锁。 ```cpp #include std::mutex mtx; void thread_...

    C++定时器实现

    std::unique_lock&lt;std::mutex&gt; lock(mtx); cv.wait_for(lock, std::chrono::seconds(seconds), [this] { return expired; }); if (!expired) { std::cout !" &lt;&lt; std::endl; } } void stop() { std::lock_...

    Boost视频教程

    - 利用`boost::thread`来创建独立运行的线程,通过`boost::mutex`和`boost::lock_guard`等同步原语确保线程安全。 - 使用`boost::thread_pool`管理一组工作线程,提高并发性能。 #### 4. **函数式编程支持...

    每天学点C++(C++实例教程:教程+源码)线程.zip

    通常与`std::unique_lock`配合使用。 4. **线程生命周期**: - **joinable状态**:新创建的线程是joinable的,这意味着主线程必须等待其结束,可以通过调用`join()`或`detach()`方法处理。 - **join()**:调用`...

    C++多线程聊天程序代码

    std::unique_lock&lt;std::mutex&gt; ulock(msgMutex); cv.wait(ulock, []{ return !messageQueue.empty(); }); // 等待消息队列非空 // 消息队列非空后,获取并处理消息 ``` 4. **网络编程**:聊天程序通常基于TCP或UDP...

    C++实现线程

    std::unique_lock&lt;std::mutex&gt; lock(mtx); cv.wait(lock, []{ return ready; }); // 条件满足,继续执行 } void signaler() { std::lock_guard&lt;std::mutex&gt; lock(mtx); ready = true; cv.notify_one(); } ...

    Timer类的代码

    std::unique_lock&lt;std::mutex&gt; lock(mtx); while (!stopped) { cv.wait_for(lock, std::chrono::milliseconds(interval)); if (!stopped) { callback(); } } } void stop() { std::lock_guard&lt;std::mutex...

    c++消息队列queue.rar

    例如,使用`std::lock_guard`或`std::unique_lock`来锁定资源,确保在关键操作(如`push()`和`pop()`)时不会发生冲突。 此外,除了`std::queue`外,还有其他实现消息队列的方法,如使用`std::deque`配合自定义的锁...

    follow me to study modern c++.zip

    std::thread允许我们创建并管理线程,而std::mutex、std::lock_guard和std::condition_variable等工具则帮助我们实现线程安全的数据访问。了解原子操作(Atomic Operations)和std::atomic对于编写高性能的并发代码...

    C++11 多线程

    - **`std::lock_guard` 和 `std::unique_lock`**:这两个智能指针类用于自动管理互斥量的锁定和解锁。`std::lock_guard`提供了一个简单的锁定机制,而`std::unique_lock`则更灵活,允许显式解锁。 - **`std::atomic`...

    Coroutine:使用线程在 C++11 中实现简单的“协程”

    std::lock_guard&lt;std::mutex&gt; lock(mutex_); running_ = false; } condition_.notify_one(); // 恢复后继续执行 std::this_thread::sleep_for(std::chrono::seconds(1)); std::cout ...

    read_and_write_operations.zip_同时读写_文件同时读写

    另外,Boost库也提供了高级的并发工具,如`boost::mutex`和`boost::unique_lock`。 异步IO是另一种实现方式,尤其在Node.js中,其事件驱动模型使得非阻塞I/O操作成为可能。通过使用`fs`模块的异步方法,可以在读写...

    C++同步实验范例

    C++11引入了`std::mutex`类来实现互斥量,如`std::lock_guard`和`std::unique_lock`智能指针可以自动管理互斥量的锁定与解锁,防止资源泄露。 2. **条件变量(Condition Variable)**:条件变量允许线程在满足特定...

    C++ 线程学习,thread常用操作

    使用`std::lock_guard`或`std::unique_lock`来自动锁定和解锁。 - **条件变量(Condition Variables)**:`std::condition_variable`允许线程等待特定条件满足后再继续执行。通常与互斥量一起使用。 - **future和...

    C++ 并发编程中文版

    在书中,会详细介绍如何使用 std::mutex、std::lock_guard、std::unique_lock 等同步工具,以确保线程安全。 此外,C++11 引入了 std::atomic,提供了原子类型的操作,可以在不需要显式使用锁的情况下执行原子操作...

    Ogre1.8.1 SDK 使用vs2013编译,使用boost库支持多线程

    Ogre提供了一些同步原语,如`Ogre::Mutex`,可以配合Boost的`lock_guard`或`unique_lock`来使用。 - 记住,多线程可能会增加复杂性,确保对线程安全有足够的理解和测试。 通过以上步骤,你将能够在VS2013中使用...

Global site tag (gtag.js) - Google Analytics