Skip to content

败犬日报 2025-05-03

1. 一个原子变量的例子

《C++ Concurrency in Action 2nd Edition》里的例子恰好在 cppref 里有:

cpp
std::vector<int> data;
std::atomic<int> flag = {0};
 
void thread_1()
{
    data.push_back(42);
    flag.store(1, std::memory_order_release);
}
 
void thread_2()
{
    int expected=1;
    // memory_order_relaxed 是可以的,因为这是一个 RMW 操作
    // 而 RMW(以任意定序)跟在释放之后将组成释放序列
    while (!flag.compare_exchange_strong(expected, 2, std::memory_order_relaxed))
    {
        expected = 1;
    }
}
 
void thread_3()
{
    while (flag.load(std::memory_order_acquire) < 2)
        ;
    // 如果我们从 atomic flag 中读到 2,将看到 vector 中储存 42
    assert(data.at(0) == 42); //决不出错
}

2. 面试:读取本地文件用 UDP 发送到 127.0.0.1,怎么减少系统调用次数

作为面试,答案是 sendfile。

3. 怎么写文档(文章)

https://www.blog.philodev.one/posts/2024-07-writing-documentation/