小编str*_*ugi的帖子

静态局部变量的线程安全增量

void foo() {
    static int id = 0;
    const int local_id = id++;
    //do something with local_id;
}
Run Code Online (Sandbox Code Playgroud)

多个线程可以多次并行调用foo.我希望foo的每次调用都使用local_id的"唯一"值.上面的代码可以吗?我想知道第二个线程是否在第一个线程增加值之前将id的值赋给local_id.如果不安全,是否有任何标准解决方案?

c++ static multithreading

6
推荐指数
1
解决办法
4541
查看次数

使用const键类型引用调用std ::指针集的count方法

我有一个类似的课程

struct S {

    bool foo(const AType& v) const {
        return values.count(&v); // compile error due to the constness of v
    }

    private:
        std::set<AType*> values;
};
Run Code Online (Sandbox Code Playgroud)

这是一个简化版本.在实际代码中,foo做了一些复杂的事情.代码产生错误

invalid conversion from ‘const AType*’ to ‘std::set<AType*>::key_type {aka AType*}’
Run Code Online (Sandbox Code Playgroud)

我认为FOO应该采取"const的A型和V",因为它不发生变异诉类型成员变量"价值"的不能被标准::设置<常量A型*>由于该结构的召唤非const方法的一些方法"值"中包含的元素.我可以抛弃'v'的常量:

bool foo(const AType& v) const {
    return values.count((AType*) &v);
}
Run Code Online (Sandbox Code Playgroud)

但我认为这可能不是一个好的解决方案.我可以有什么解决方案?

c++ stl const

5
推荐指数
1
解决办法
293
查看次数

标签 统计

c++ ×2

const ×1

multithreading ×1

static ×1

stl ×1