C++ 线程 - 非共享成员

时间:2021-02-15 10:36:03

标签: c++ multithreading tcpclient

我有客户类:

class Client
{
    std::vector<char> buffer;

    //actually these are asio socket and waitable_timer but that's beside the point
    Socket socket;
    Timer timer;

    public:
    void send_request(std::string req); //sends request in new thread and immediately returns
};

如果我没记错的话,buffersockettimer 在线程之间是共享的。现在我希望 socketbuffer 在线程之间共享,以便它们共享连接并读入相同的缓冲区。但我希望每个线程都有自己的计时器。有没有比在 send_request(std::string) 函数中本地创建计时器然后通过参数传递给其他函数(由 send_request 调用的函数)更好的方法呢? ?请注意,我可以在每个函数中创建新的计时器,然后在最后销毁它(因为每个函数都设置了截止日期,读取数据并调用另一个函数,该函数设置了独立于前一个的新截止日期)但是使用 asio 我无法让它运行几个小时后,我也没有看到它以这种方式使用,所以认为这不是一种选择。

2 个答案:

答案 0 :(得分:1)

您可以使用 std::mutex<mutex_obj>.lock() 锁定对象,<mutex_obj>.unlock 解锁对象。

答案 1 :(得分:0)

您可以拥有 ClientConnection 类的单个实例以及 socketbuffer 字段,以及 Session 类的多个实例(带有timer 字段)链接到 Connection 实例。

顺便说一句,我不确定您如何在多个线程之间有意义地共享单个套接字和缓冲区。