news 2026/10/21 10:31:51

计算机里的“同步”不是“同时”——详解多线程数据混乱之谜

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
计算机里的“同步”不是“同时”——详解多线程数据混乱之谜

各类资料学习下载合集
链接:https://pan.quark.cn/s/7c8c391011eb

在多线程编程中,我们经常听到“同步”这个词。在现实生活中,比如阅兵方阵,同步意味着“大家一起做动作”(同时性);但在计算机科学中,同步(Synchronization)的意思恰恰相反——它强调的是协同步调,按预定的先后次序运行(顺序性)。

今天我们就来探讨为什么多线程需要同步,以及如果没有同步,世界会乱成什么样。


一、 为什么会发生“数据混乱”?

在多线程环境下,数据混乱(Data Chaos)通常由三个要素共同导致,这也是我们解决问题的根本逻辑:

  1. 资源共享:多个线程访问同一块内存(必要条件)。
  2. 调度随机:操作系统分配 CPU 时间片是随机的,线程随时可能被暂停(不可控)。
  3. 缺乏同步:没有机制来控制访问的顺序(这是唯一我们可以解决的)。

当这三者同时存在时,就会引发与时间有关的错误(Time-related errors)。我们通过两个经典案例来复现这种灾难。


二、 经典案例一:银行取钱问题

1. 场景描述

假设有一个银行账户余额50000 元。

  • 丈夫(线程 A):拿着存折去柜台取20000 元。柜台操作慢,查询余额后需要确认签字(模拟耗时)。
  • 妻子(线程 B):拿着银行卡去 ATM 取20000 元。ATM 操作快。

预期结果:50000 - 20000 - 20000 =10000 元。

2. 代码复现 (bank_race.c)

为了模拟“调度随机”和操作耗时,我们在读取余额和写入余额之间强制加入usleep,人为制造 CPU 切出的机会。

#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>// 共享资源:银行账户余额intbalance=50000;void*withdraw(void*arg){intamount=(int)(long)arg;intcur_balance;// 1. 读取当前余额 (Load)cur_balance=balance;printf("--- [线程 %lu] 查询余额: %d, 准备取款: %d\n",pthread_self(
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 5:51:08

LocalAI终极教程:5分钟打造个人AI工作室

LocalAI终极教程&#xff1a;5分钟打造个人AI工作室 【免费下载链接】LocalAI 项目地址: https://gitcode.com/gh_mirrors/loc/LocalAI 还在为AI服务的高昂费用和隐私担忧而烦恼吗&#xff1f;LocalAI让您在本地计算机上零成本运行强大的AI模型&#xff0c;完全掌控数据…

作者头像 李华
网站建设 2026/10/21 7:27:28

Coolapk-Lite终极指南:免费快速解锁Windows酷安新体验

Coolapk-Lite终极指南&#xff1a;免费快速解锁Windows酷安新体验 【免费下载链接】Coolapk-Lite 一个基于 UWP 平台的第三方酷安客户端精简版 项目地址: https://gitcode.com/gh_mirrors/co/Coolapk-Lite 还在为安卓模拟器的卡顿和资源占用而苦恼吗&#xff1f;想在Win…

作者头像 李华
网站建设 2026/10/21 10:28:00

LocalAI终极指南:5步打造个人专属AI开发环境

LocalAI终极指南&#xff1a;5步打造个人专属AI开发环境 【免费下载链接】LocalAI 项目地址: https://gitcode.com/gh_mirrors/loc/LocalAI 还在为每次调用云端AI服务而担心数据安全和成本问题吗&#xff1f;现在&#xff0c;通过LocalAI这款强大的本地AI部署工具&…

作者头像 李华
网站建设 2026/10/20 7:00:34

5分钟精通KubeSphere网络诊断:从入门到实战的完整指南

5分钟精通KubeSphere网络诊断&#xff1a;从入门到实战的完整指南 【免费下载链接】kubesphere The container platform tailored for Kubernetes multi-cloud, datacenter, and edge management ⎈ &#x1f5a5; ☁️ 项目地址: https://gitcode.com/GitHub_Trending/ku/ku…

作者头像 李华
网站建设 2026/10/21 5:59:45

MapsModelsImporter终极指南:解锁Blender地理数据导入新维度

MapsModelsImporter终极指南&#xff1a;解锁Blender地理数据导入新维度 【免费下载链接】MapsModelsImporter A Blender add-on to import models from google maps 项目地址: https://gitcode.com/gh_mirrors/ma/MapsModelsImporter 你是否曾为构建真实城市场景而耗费…

作者头像 李华
网站建设 2026/10/21 8:39:49

PIKE-RAG终极指南:掌握知识增强与智能检索的完整教程

PIKE-RAG&#xff08;sPecIalized KnowledgE and Rationale Augmented Generation&#xff09;是微软推出的革命性AI系统&#xff0c;专注于知识增强和智能检索技术&#xff0c;通过AI推理能力显著提升大语言模型在复杂任务中的表现。这套系统在多个基准测试中展现出卓越性能&a…

作者头像 李华