小编Geo*_*rge的帖子

使用 C++11 实现线程安全并使用临时对象通过引用传递

在阅读了Similar Question 中的答案后,我仍然在想为什么这个代码片段没有出现段错误。临时对象“数据”应该在离开作用域后被释放。但显然,“数据”并未公布。有人可以帮助我吗?谢谢

#include <iostream>
#include <string>
#include <thread>
using namespace std;

void thfunc(string &data)
{
    for (;;)
    {
        cout << data << endl;
    }
}

int main()
{
    {
        string data = "123";
        std::thread th1(thfunc, std::ref(data));
        th1.detach();
    }

    for (;;)
    {
        cout << "main loop" << endl;
    }

    return 0;
}

Run Code Online (Sandbox Code Playgroud)

类似问题

c++ multithreading reference thread-safety

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

与自旋锁相比,无锁编程有哪些优势?

我想知道无锁编程相对于自旋锁有哪些优点?我认为当我们在一个线程(称为A)中使用CAS机制进行无锁编程时,如果其他线程更改了CAS中的值,A线程仍然需要再次循环。我认为这就像我们使用自旋锁一样!

我对此很困惑。虽然我知道CAS和spin-lock适合在锁争用不激烈的情况下使用,但是谁能解释一下在哪些场景下应该使用lock free,应该使用spin lock?

multithreading lock-free spinlock lockless

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