互斥量的实现原理探究
文章目录
互斥量的概念
互斥量(mutex)是一种同步原语,用于保护多个线程同时访问共享数据。互斥量提供独占的、非递归的所有权语义:一个线程从成功调用lock
或try_lock
开始,到调用unlock
结束,都拥有互斥量。
何为原子性操作
程序的原子性指:整个程序中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。
原子性在一个操作是不可中断的,要么全部执行成功要么全部执行失败,有着 “同生共死” 的感觉。在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程所干扰
如果要保证原子性,必须符合以下两条规则:
运算结果并不依赖于变量的当前值,或者能够确保只有一个线程修改变量的值。
变量不需要与其他的状态变量共同参与不变约束。
原理探究
首先给出一段加锁场景的部分代码:
void route(ThreadData *td)
{
// 加锁
while (true)
{