错误:使用已删除的函数‘std::atomic<unsigned int>::atomic(const std::atomic<unsigned int>&)’[重复]

问题描述 投票:0回答:1

在尝试从 Git 存储库编译项目的代码库时,我遇到了以下错误:

DGSF-AvA/worker/serverless_gpu/svgpu_manager.cpp:90:78: error: use of deleted function ‘std::atomic<unsigned int>::atomic(const std::atomic<unsigned int>&)’
             printf("not my turn:  me %u  turn %u\n", current_id, current_turn);
                                                                              ^

我搜索了问题背后的原因并发现了一个问题

根据上面的问题和所述的解决方案,我假设错误是由下面给出的行引起的(在文件中):

...
...
std::atomic<uint32_t> current_turn(0); //<------Suspected line causing the issue
uint32_t current_id(0);
std::mutex sched_lock;

ava_proto::WorkerAssignReply SVGPUManager::HandleRequest(const ava_proto::WorkerAssignRequest &request) {
    ava_proto::WorkerAssignReply reply;

    if (request.gpu_count() > 1) {
        std::cerr << "ERR: someone requested more than 1 GPU, no bueno" << std::endl;
        return reply;
    }

    sched_lock.lock();
    uint32_t q_id = current_id;
    current_id += 1;
    sched_lock.unlock();

    uint32_t gpu_mem = request.gpu_mem()[0];

    //std::cerr << "[SVLESS-MNGR]: API server request arrived, asking for schedule with memory " << gpu_mem << std::endl;
    while (true) {
        //if not our turn, wait
        if (current_turn != current_id) {
            printf("not my turn:  me %u  turn %u\n", current_id, current_turn); // <--- line which complains of the deleted function
            std::this_thread::sleep_for(std::chrono::milliseconds(50));
        }
...
...

我认为原因与链接的问题线程中提到的类似。但是,建议将此处初始化

current_turn
的方式作为链接问题的答案中的有效解决方案。

我什至尝试了解决方案中列出的其他几个选项:

std::atomic<uint32_t> current_turn{0};
std::atomic<uint32_t> current_turn = {0};

但是上述替代方案都不能解决这个问题。我发现

current_turn
的数据类型是
std::atomic<uint32_t>
(与问题中提到的数据类型
std::atomic_int
不同)

另外,我正在谈论的项目使用了

CMake
。编译器标准声明如下:

set(CMAKE_CXX_STANDARD 14)

因此,该项目是使用

C++14
而不是
C++11
(在链接的问题中)构建的。谁能帮我解决这个问题吗?

c++ c++14 stdatomic
1个回答
1
投票

std::atomic
不是原始类型,不能在
printf
中使用,并且无法复制。您可能想在
current_turn.load()
中使用
printf

© www.soinside.com 2019 - 2024. All rights reserved.