小编Jen*_*röm的帖子

为什么此代码不创建竞争条件?

我的问题是,在阅读有关线程的内容时,如果多个踏板访问一个变量,就会出现竞争条件。我的直觉是,在这种情况下,我的代码会为“ int a”创建一个竞争条件,例如https://en.wikipedia.org/wiki/Race_condition#Example,但不会发生。我的问题是为什么会这样?

我试图在数组中单独创建多个线程,但是没有发生竞争条件。

void increment(int& a) {
    ++a;
}

int main()
{

    int a = 0;

    std::thread pool[100];

    for (auto& t : pool) {
        t = std::thread(increment, std::ref(a));
    }


    for (auto& t : pool) {
        t.join();
    }

    printf("%d", a);

}
Run Code Online (Sandbox Code Playgroud)

我希望只有一些线程实际上会增加“ a”,并且会出现竞争条件,但是我的代码却并非如此

c++ multithreading race-condition c++11

2
推荐指数
2
解决办法
200
查看次数

如何打印整个数组?

所以我把向量和windows-api弄混了,有人建议我使用指向向量中第一个元素的指针作为函数的缓冲区。

我出去尝试用语法打印数组,然后打印了整个数组,现在我想知道为什么吗?

char test[10] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' };
std::cout << &test[0] << std::endl;
//output: abcdefghij
Run Code Online (Sandbox Code Playgroud)

编辑1:我发现使用数组名称进行打印也可以,但是由于使用引用语法以降序打印char数组的原因,此代码令我惊讶。但是,如果不使用refrenece语法,这不奇怪为什么吗?

for (int i = 0; i < 10; i++) {
    std::cout << &test[0] + i << " ";
}
//outputs: abcdefghij bcdefghij cdefghij defghij efghij fghij ghij hij ij j
Run Code Online (Sandbox Code Playgroud)

c++ arrays pointers reference

0
推荐指数
1
解决办法
75
查看次数