1.前言2.MichaHofri算法3.测试代码4.总结1.前言在上一篇文章中,一个纯软件算法用于实现临界区保护功能,文章链接:C语言剩菜2:用纯软件替换Mutex互斥锁。首先明确一点:如果操作系统提供的mutex能够实现我需要的功能,我一定会使用mutex。之所以介绍Peterson算法,是因为它比较有趣,体积小,可以给我们带来一些“正常”编程之外的一些思考。一些后台小伙伴也对这个算法发表了一些评论。只要有想法就很好,怕是想不出来。我的一个朋友提到这个算法只能在2个线程中使用。有没有其他类似的算法可以在多线程中使用?晚上下班,花了点时间找到了下面这个算法,分享一下。!2.MichaHofriAlgorithm这个算法的名字我没有找到,暂且以作者的名字来称呼这个算法吧!算法截图:从算法的主要代码来看,Hofri算法主要是对Peterson算法的扩展,都使用2个全局变量数组来控制哪些线程可以进入临界区。这个算法的证明比较复杂,都是数学证明。文章在这里:ProofofaMutualExclusionAlgorithm--A`Classic'icExample,发表于1989年,有兴趣的朋友可以自己烧脑研究一下。3.测试代码//线程操作资源staticintnum=0;//创建10个线程#defineTHREAD_NUM10//这2个全局变量控制算法intflag[THREAD_NUM]={0};intturn[THREAD_NUM-1]={0};//这是线程函数void*thread_routine(void*arg){intindex=*(int*)arg;for(inti=0;i<10000;++i)//线程循环次数{for(intj=1;j
