## std::shared_mutex: C++ 中的读写锁
本文探讨了 `std::shared_mutex`,这是 C++17 的一项特性,为主要读取的数据提供了改进的并发性。与提供独占访问的 `std::mutex` 不同,`std::shared_mutex` 允许多个读取者同时访问资源,同时确保写入者拥有独占访问权。
其核心优势在于,在频繁读取和不频繁写入的场景中(例如缓存、配置数据或统计信息),可以提高吞吐量。基准测试表明,在读取密集型工作负载中使用 `std::shared_mutex` 代替 `std::mutex` 可以显著提高性能(在某个示例中,运行时从 285 毫秒减少到 102 毫秒)。
关键注意事项包括避免递归锁定以及无法在潜在死锁的情况下将共享锁升级为独占锁。虽然 `std::shared_mutex` 会引入一些开销,但它仍然是一个有价值的工具,尤其是在优先考虑简单性时。
尽管 C++20 及更高版本引入了新的并发特性(例如 `std::jthread` 和信号量),但 `std::shared_mutex` 仍然是有效地管理主要进行读取操作的共享状态的实用解决方案。
## 24 Hour Fitness 无法使用的退订链接
24 Hour Fitness 因其营销邮件中持续无法使用的退订链接面临潜在法律问题,这个问题早在2019年就被报告。点击该链接会显示西班牙语错误信息,源于与OneTrust同意管理平台通信时,JavaScript代码中关于内容类型标头的一行错误——讽刺的是,OneTrust是一家专注于法规遵从的公司。
尽管该问题于2025年11月被报告,并提供了简单的修复方案,但至今仍未解决,导致作者收到了超过40封不想要的营销邮件。这违反了CAN-SPAM法案,该法案要求提供可用的退出机制,类似违规行为的近期罚款已达数百万美元。
作者对持续不断的无关营销“精神攻击”感到沮丧,因此自行构建了一个可用的退订页面作为替代方案。他们呼吁24 Hour Fitness的工程团队中的某人实施这一行修复代码,并为所有用户解决该问题。
## gitas:轻松管理多个 Git 账户
**gitas** 是一款在 Linux、macOS 和 Windows 上无缝切换多个 Git 账户的工具。它简化了使用个人和工作账户,或访问私有仓库的操作。
**安装** 通过 shell 脚本、PowerShell、Homebrew 或 Cargo 可以轻松完成。
**主要特性:**
* **账户管理:** 使用交互式 TUI (`gitas`) 添加、编辑和删除账户。
* **身份切换:** 更新 Git 配置以持久使用账户。
* **命令代理:** 以特定账户运行单个 Git 命令,而无需更改您的配置 (`gitas git clone ...`)。
* **安全存储:** 凭据安全地存储在您系统的原生钥匙链中。
**卸载** 也同样简单,使用与安装相对应的方法即可。
gitas 采用 Apache 许可证 2.0。安装脚本和更多信息可在项目的 GitHub 页面上找到。
## Acme 天气:一种新的预报方法
在开发天气应用程序 15 年后,包括流行的 Dark Sky(后来整合到 Apple 天气中),其创建者推出了 Acme 天气。他们对现有应用程序的局限性感到不满,特别是它们未能解决预报的*不确定性*,因此他们构建了一项新的服务,专注于提供更真实和信息丰富的体验。
Acme 天气不提供单一的“最佳猜测”预报。相反,它呈现“可能的替代未来”——一系列预测,说明了可能的结果范围,帮助用户了解预报的可靠性。“社区报告”功能进一步提高了实时准确性,允许用户分享当前状况。
除了预报之外,Acme 天气还拥有一套详细的上下文地图(雷达、闪电、温度等)以及针对从降雨预警到潜在彩虹的一切的可定制通知。独特的“Acme Labs”部分提供有趣的实验性功能,例如日落提醒。
Acme 天气优先考虑用户隐私,采用直接订阅模式(每年 25 美元),不进行第三方跟踪或数据销售。它目前可在 iOS 上使用,Android 计划正在开发中。
## 基于主干的开发:总结
基于主干的开发 (TBD) 是一种源代码控制策略,侧重于频繁地直接提交到主分支(“主干”/“main”),避免长期存在的分支。这种方法是实现持续集成和持续交付的关键,确保代码库始终可发布。
团队,无论规模大小,都致力于每天集成多次变更。小型团队可以直接提交,而大型团队则使用短期的特性分支——理想情况下是单个开发者完成的工作——并使用拉取请求进行代码审查和自动化构建验证。特性标志和“抽象分层”等技术有助于管理较大的变更。
TBD 与 Gitflow 等模型形成对比,后者依赖于许多长期运行的分支。虽然可以使用发布分支进行稳定化,但许多高吞吐量团队直接从主干发布,采用“修复后提交”策略。
成功的 TBD 需要一个强大的 CI 系统来防止构建中断,并且具有可扩展性,例如谷歌等拥有数万名开发人员共享单个主干的组织所证明的那样。 这是一种成熟的做法,可以追溯到 1980 年代,随着源代码控制和相关工具的进步而日益普及。