当前位置:首页 > > 满天芯
[导读]一、前言二、Peterson算法简介三、测试代码四、Mutex互斥锁对代码执行效率的影响五、总结一、前言在Linux系统中,当多个线程并行执行时,如果需要访问同一个资源,那么在访问资源的地方,需要使用操作系统为我们提供的同步原语来进行保护。同步原语包括:互斥锁、条件变量、信号量等...


  • 一、前言

  • 二、Peterson 算法简介

  • 三、测试代码

  • 四、Mutex 互斥锁对代码执行效率的影响

  • 五、总结


一、前言

在 Linux 系统中,当多个线程并行执行时,如果需要访问同一个资源,那么在访问资源的地方,需要使用操作系统为我们提供的同步原语来进行保护。同步原语包括:互斥锁、条件变量、信号量等,被保护的代码称作“临界区”。

这是非常正规的流程,我们基本上也都是这么做的。

那有没有想过,这些同步原语对代码的执行效率会产生多大的影响?是否可以不使用操作系统提供的这些机制,而是用其它纯软件的方法也能达到保护临界区的目的呢?

这篇文章我们介绍一下 Peterson(皮特森)算法,也许实用性不强,但是可以给我们带来一些思考,提高我们的编程元技能。

二、Peterson 算法简介

这个算法主要用来解决临界区的保护问题。我们知道,一个临界区必须保证 3 个条件:

  1. 互斥访问: 在任意一个时刻,最多只能有一个线程可以进入临界区;
  2. 空闲让进:当没有线程正在执行临界区的代码时,必须在所有申请进入临界区的线程中,选择其中的一个,让它进入临界区;
  3. 有限等待:当一个线程申请进去临界区时,不能无限的等待,必须在有限的时间内获得许可进入临界区。也就是说,不论其优先级多低,不应该饿死在该临界区入口处。
Peterson算法是一个实现互斥锁的并发程序设计算法,可以控制两个线程访问一个共享的用户资源而不发生访问冲突。

Peterson 算法是基于双线程互斥访问的 LockOne 与 LockTwo 算法而来。

  1. LockOne 算法使用一个 flag 布尔数组来实现互斥;  
  2. LockTwo 使用一个 turn 的整型量来实现互斥;  
这 2 个算法都实现了互斥,但是都存在死锁的可能。Peterson 算法把这两种算法结合起来,完美地用软件实现了双线程互斥问题。

算法说明如下

两个重要的全局变量:

1. flag 数组:有 2 个布尔元素,分别代表一个线程是否申请进入临界区;
2. turn:如果 2 个线程都申请进入临界区,这个变量将会决定让哪一个线程进入临界区;

三、测试代码

// 被 2 个线程同时访问的全局资源
static int num = 0;

BOOL flag[2] = { 0 };
int turn = 0;

void *thread0_routine(void *arg)
{
for (int i = 0; i < 1000000; i)
{
flag[0] = TRUE;
turn = 1;
while (TRUE == flag[1]
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

评估依据为愿景完整性和执行能力 印度诺伊达2026年10月11日 /美通社/ -- 全栈智能体 AI 质量工程平台 TestMu AI 宣布,公司在 2026 年...

关键字: MAGIC STM 软件 智能体

杭州2026年10月10日 /美通社/ -- 近日,国际独立第三方检测、检验和认证机构德国莱茵TÜV大中华区(以下简称"TÜV莱茵")...

关键字: 测试 网络安全 软件 零部件

Arasan Chip Systems 宣布,将于 2026 年 10 月 21 日在台北演示业界首款 MIPI SWI3S™ 管理端 IP 和外设端 IP 加利福尼亚州...

关键字: MIPI AN 控制器 软件

阿联酋乌姆盖万2026年9月25日 /美通社/ -- Robo.ai Inc.(纳斯达克股票代码:AIIO,以下简称"Robo.ai"或"公司&...

关键字: AI HOLDING 软件 HM

上海2026年9月23日 /美通社/ -- 2026年9月7日,国内平台型医疗器械龙头麦科田集团成功登陆港交所,正式开启国际化资本市场新征程。 麦科田集团在港交所上市 全球化越快,财务合并越复杂 业务全球...

关键字: CAN NET 软件 STREAM

量子计算的投资逻辑正从科研指标走向工程力和产业力 上海2026年9月7日 /美通社/ -- 上海矩量光启计算技术有限公司近日完成 3 亿元天使+轮融资,本轮由国新基金领投、复星创富、兴湘资本、鼎和高达、金雨茂物、云时资...

关键字: 硅基 软件 量子计算机 半导体工艺

——富勒科技师总接受《物流技术与应用融媒》专访 上海2026年8月31日 /美通社/ -- 当中国物流硬件出海已成常态,物流软件的国际化征途却面临迥异的挑战。近日,上海富勒信息科技有限公司(以下简称"富勒科技...

关键字: 软件 接口 新加坡 数据处理

北京2026年8月18日 /美通社/ -- 2026 年 8 月 14 日,TÜV南德意志集团(以下简称"TÜV南德")与麒麟软件有限公司(以下简称"麒麟软件&...

关键字: 软件 ISO 虚拟化 麒麟

逾两成机构表示,其AI模型或应用曾遭入侵 北京 2026年7月31日 /美通社/ -- 根据IBM《2026年数据泄露成本报告》,在恶意数据泄露事件中,AI驱动的...

关键字: IBM AI 软件 BSP

嵌入式系统向来是软件驱动的。几十年来,工程师一直借助软件来打造产品差异化、提升性能,并在固定硬件的基础上扩展更多功能。改变的不是想法本身,而是规模与复杂性。

关键字: 嵌入式系统 软件 物联网
关闭