如何在C++中實(shí)現(xiàn)actor模型

c++
小樊
86
2024-08-19 18:44:27

在C++中實(shí)現(xiàn)actor模型通常需要使用線程庫(kù)或者庫(kù)來(lái)實(shí)現(xiàn)并發(fā)和消息傳遞。下面是一個(gè)簡(jiǎn)單的示例實(shí)現(xiàn):

#include <iostream>
#include <thread>
#include <queue>
#include <mutex>
#include <condition_variable>

class Actor {
public:
    Actor() {
        thread_ = std::thread([this] {
            while (true) {
                std::unique_lock<std::mutex> lock(mutex_);
                if (messages_.empty()) {
                    cond_.wait(lock);
                }
                auto message = messages_.front();
                messages_.pop();
                lock.unlock();
                
                // 處理消息
                processMessage(message);
            }
        });
    }

    void sendMessage(const std::string& message) {
        std::lock_guard<std::mutex> lock(mutex_);
        messages_.push(message);
        cond_.notify_one();
    }

    void processMessage(const std::string& message) {
        std::cout << "Received message: " << message << std::endl;
    }

private:
    std::thread thread_;
    std::queue<std::string> messages_;
    std::mutex mutex_;
    std::condition_variable cond_;
};

int main() {
    Actor actor;

    actor.sendMessage("Hello");
    actor.sendMessage("World");

    std::this_thread::sleep_for(std::chrono::seconds(1));
    
    return 0;
}

在這個(gè)示例中,我們創(chuàng)建了一個(gè)Actor類來(lái)模擬actor,它有一個(gè)消息隊(duì)列messages_來(lái)存儲(chǔ)收到的消息,一個(gè)線程來(lái)處理消息。sendMessage方法用于向actor發(fā)送消息,processMessage方法用于處理消息。在main函數(shù)中,我們創(chuàng)建一個(gè)actor并發(fā)送兩條消息給它,最后通過(guò)sleep_for來(lái)等待消息處理完成。

這只是一個(gè)簡(jiǎn)單的示例,實(shí)際應(yīng)用中可能需要處理更多復(fù)雜的情況,比如消息的類型、消息處理的順序等??梢允褂酶墒斓牟l(fā)庫(kù)如Boost.Actor來(lái)實(shí)現(xiàn)更復(fù)雜的actor模型。

0