将 std::thread 封装成一个类,传参出问题 ? 为什么在线程里边打印出来参数会重复 ?

#include <memory>
#include <thread>
#include <unistd.h>
#include <vector>

    struct Data {
    int id;
};

class Thread {
    public:
    template <class Function, class... Args>
    Thread(Function &&f, Args &&...args) noexcept
        : internal_{ [func = std::forward<Function>(f), &args...]() {
            func(args...);
        } }
    {
    }

    private:
    std::thread internal_;
};

void func(Data *data)
{
    printf("                in thread, data: %p, id: %d\n", data, data->id);
}

int main()
{
    static Data data[8];
    std::vector<Thread *> threads;
    volatile int i = 0;
    for (i = 0; i < 8; i++) {
        data[i].id = i;
        printf("out thread, data: %p\n", &data[i]);
        auto tmp = new Thread(func, &data[i]);
        threads.emplace_back(tmp);
    }

    sleep(100);
    return 0;
}
out thread, data: 0x562bb497d040
out thread, data: 0x562bb497d044
                in thread, data: 0x562bb497d044, id: 1
out thread, data: 0x562bb497d048
                in thread, data: 0x562bb497d048, id: 2
out thread, data: 0x562bb497d04c
                in thread, data: 0x562bb497d04c, id: 3
out thread, data: 0x562bb497d050
                in thread, data: 0x562bb497d04c, id: 3
out thread, data: 0x562bb497d054
                in thread, data: 0x562bb497d054, id: 5
out thread, data: 0x562bb497d058
                in thread, data: 0x562bb497d054, id: 5
                in thread, data: 0x562bb497d058, id: 6
out thread, data: 0x562bb497d05c
                in thread, data: 0x562bb497d05c, id: 7
阅读 711
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题