败犬日报 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/