代码之家  ›  专栏  ›  技术社区  ›  bartop

原子学与线程饥饿

  •  3
  • bartop  · 技术社区  · 6 年前

    我有一个关于C++标准和更一般的计算机体系结构的问题。想象一下下面的代码:

    #include <atomic>
    #include <thread>
    
    std::atomic<int> a {0};
    
    int main () {
    
        std::thread t1([&a](){
            int i = 1;
            int ao = a.load();
            while(!a.compare_exchange_weak(ao, i));
        }), t2([&a](){
            int i = 1;
            int ao = a.load();
            while(a.compare_exchange_weak(ao, i));
        });
    
        t1.join();
        t2.join();
        return 0;
    }
    

    我有两个问题:

    1. 理论上,按照标准,这会导致线程不足吗?
    2. 第二,在x86体系结构上,这会导致饥饿吗?我能相信它吗?
    0 回复  |  直到 6 年前