91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

TP框架中的消息隊列實現

發布時間:2024-08-27 02:07:52 來源:億速云 閱讀:83 作者:小樊 欄目:編程語言

TP(Thread Pool,線程池)框架是一種用于管理和調度線程資源的技術,它可以提高系統性能,減少線程創建和銷毀的開銷。在TP框架中,消息隊列是一種常用的任務調度和處理機制。以下是一個簡單的消息隊列實現:

  1. 首先,定義一個任務類(Task),它包含了要執行的任務信息和任務處理函數。
class Task {
public:
    virtual void execute() = 0; // 純虛函數,子類需要實現具體的任務處理邏輯
};
  1. 創建一個消息隊列類(MessageQueue),它使用一個線程安全的隊列(如std::queue)來存儲任務對象。
#include<queue>
#include <mutex>
#include<condition_variable>

class MessageQueue {
public:
    void push(Task* task) {
        std::unique_lock<std::mutex> lock(mutex_);
        queue_.push(task);
        cv_.notify_one(); // 通知等待的線程有新任務到來
    }

    Task* pop() {
        std::unique_lock<std::mutex> lock(mutex_);
        cv_.wait(lock, [this] { return !queue_.empty(); }); // 當隊列為空時,線程等待
        Task* task = queue_.front();
        queue_.pop();
        return task;
    }

private:
    std::queue<Task*> queue_;
    std::mutex mutex_;
    std::condition_variable cv_;
};
  1. 創建一個線程池類(ThreadPool),它包含了多個工作線程,這些線程會從消息隊列中獲取任務并執行。
#include<vector>
#include<thread>

class ThreadPool {
public:
    ThreadPool(size_t num_threads, MessageQueue& message_queue) : message_queue_(message_queue) {
        for (size_t i = 0; i < num_threads; ++i) {
            threads_.emplace_back(&ThreadPool::worker, this);
        }
    }

    ~ThreadPool() {
        for (auto& thread : threads_) {
            if (thread.joinable()) {
                thread.join();
            }
        }
    }

    void add_task(Task* task) {
        message_queue_.push(task);
    }

private:
    void worker() {
        while (true) {
            Task* task = message_queue_.pop();
            if (task) {
                task->execute();
                delete task; // 任務執行完畢后,釋放任務對象內存
            }
        }
    }

    std::vector<std::thread> threads_;
    MessageQueue& message_queue_;
};
  1. 使用示例:
class MyTask : public Task {
public:
    MyTask(int data) : data_(data) {}

    void execute() override {
        // 在這里實現具體的任務處理邏輯
        std::cout << "Processing task with data: "<< data_<< std::endl;
    }

private:
    int data_;
};

int main() {
    MessageQueue message_queue;
    ThreadPool thread_pool(4, message_queue); // 創建一個包含4個工作線程的線程池

    // 添加任務到線程池
    for (int i = 0; i < 10; ++i) {
        thread_pool.add_task(new MyTask(i));
    }

    // 主線程等待用戶輸入,以便觀察任務執行情況
    std::cin.get();

    return 0;
}

這個簡單的TP框架中的消息隊列實現可以根據實際需求進行擴展和優化。例如,可以添加任務優先級、限制隊列大小等功能。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彭阳县| 九江县| 山丹县| 磐安县| 察雅县| 太白县| 青川县| 东山县| 玛沁县| 赣州市| 乐安县| 富平县| 浑源县| 星子县| 民县| 镇平县| 天全县| 乌鲁木齐市| 伊金霍洛旗| 金秀| 宁夏| 九江市| 台湾省| 高尔夫| 同仁县| 中卫市| 宜君县| 霞浦县| 宿州市| 博客| 祁东县| 张家港市| 恭城| 莱西市| 莫力| 邵阳县| 河北省| 清涧县| 忻州市| 鄂州市| 沙雅县|