1.4 新手入门
2.1 基本线程管理
2.2 向线程函数传递参数
2.3 转移线程的所有权
2.4 选择运行时的线程数
2.5 识别线程
3.2 用互斥锁保护共享数据
3.3 保护共享数据的备选功能
4.1 等待事件或其他条件
4.2 用期值等待一次性事件
4.3 有时间限制的等待
@startuml sharedptr
state "初始状态" as IS #aa3 {
}
state "获取Pin" as GP #aa3{
}
state "验证PIN" as VP #aa3{
}
state "等待用户输入取钱金额" as WWA #aa3{
}
state "等待银行验证" as WFC #aa3{
}
state "完成" as Done #aa3{
}
[*] -[#green]-> IS
IS -[#green]-> GP: 已插入卡片
GP -[#green]-> GP: 输入数字
GP -[#green]-> GP: 清除最后一个数字
GP -[#green]-> VP: 输入数字(最终输入)
GP -[#green]-> Done: 取消输入
VP -[#green]-> Done: PIN验证失败
VP -[#green]-> WWA: PIN验证成功
WWA -[#green]-> Done: 取消交易
WWA -[#green]-> WFC: 提现金额已经输入
WFC -[#green]-> Done: 余额不足
WFC -[#green]-> Done: 取现成功(吐出现金)
Done -[#green]-> IS: 取卡
@enduml
5.2 C++中的原子操作和类型
5.3 同步操作和强制顺序
6.2 基于锁的并发数据结构
6.3 设计更复杂的基于锁的数据结构
7.1 定义和结果
7.2 无锁数据结构示例
7.2.3 使用危险指针标注不能回收的节点
7.2.4使用引用计数检测正在使用的节点
7.2.5将内存模型应用于无锁栈
7.2.5将内存模型应用于无锁栈