C++11 线程安全的BlockingQueue实现

参考了muduo的BlockingQueue的实现,用C++11改写:

#ifndef _BLOCKINGQUEUE_H_
#define _BLOCKINGQUEUE_H_

#include <mutex>
#include <condition_variable>
#include <deque>
#include <assert.h>

template <typename T>
class BlockingQueue {
public:
    using MutexLockGuard = std::lock_guard<std::mutex>;

    BlockingQueue()
        : _mutex(),
          _notEmpty(),
          _queue()
    {
    }

    BlockingQueue(
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++11提供了一些新的线程库,可以更方便地编写线程安全的代码。以下是一个简单的线程类实现,使用了C++11的std::thread和std::mutex来实现线程安全。 ```c++ #include <thread> #include <mutex> class Thread { public: Thread() : m_thread(), m_running(false), m_mutex() {} virtual ~Thread() {} void start() { std::lock_guard<std::mutex> lock(m_mutex); if (!m_running) { m_running = true; m_thread = std::thread(&Thread::run, this); } } void stop() { std::lock_guard<std::mutex> lock(m_mutex); if (m_running) { m_running = false; m_thread.join(); } } virtual void run() = 0; private: std::thread m_thread; bool m_running; std::mutex m_mutex; }; ``` 在上面的代码中,我们创建了一个名为Thread的类,其中包含了一个std::thread和一个std::mutex来实现线程的启动和停止。 start()方法用于启动线程,它首先获取了一个std::lock_guard<std::mutex>类型的锁,以确保线程安全。然后检查线程是否已经运行,如果没有运行,则将m_running标志设置为true,并启动一个新的线程,该线程调用run()方法来执行实际的线程代码。 stop()方法用于停止线程,它也获取了一个std::lock_guard<std::mutex>类型的锁,以确保线程安全。然后检查线程是否正在运行,如果正在运行,则将m_running标志设置为false,并等待线程结束。 最后,我们定义了一个纯虚拟的run()方法,该方法必须由派生类实现,以提供实际的线程代码。 使用这个Thread类的示例代码如下: ```c++ #include <iostream> class MyThread : public Thread { public: virtual void run() { for (int i = 0; i < 10; ++i) { std::cout << "MyThread: " << i << std::endl; std::this_thread::sleep_for(std::chrono::milliseconds(100)); } } }; int main() { MyThread thread; thread.start(); std::this_thread::sleep_for(std::chrono::milliseconds(1000)); thread.stop(); return 0; } ``` 在上面的例子中,我们创建了一个名为MyThread的类,该类继承自Thread类,并实现了run()方法,以打印一些文本和等待一段时间。 然后我们在main()函数中创建了一个MyThread对象,并调用了start()方法来启动线程。然后我们等待1秒钟,然后调用stop()方法来停止线程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值