文档介绍:维普资讯
.,., 技术交流微型电脑应用年第卷第期
多线程同步资源冲突解决方法
陈晓龙
摘要该文探讨了用临界区、互斥、信号量方法解决多步。
个线程同步使用进程的共享资源,以免线程产生中突。步骤如下:
关键词线程临界区互斥信号量建立互斥对象变量调用函数。
线程拥有互斥对象,直到进入发信号状态调用
一
、引言函数后,别的线程不能进入代码块
释放互斥对象调用函数,解除拥
多线程的应用很广泛,作用也很大例如在工业自动控有关系。具体操作见程序注释。
制、数据的后台查询、图形处理等方面。
。而在多线程的应在互斥的基础上建立的,但增加了资源计数的功能,预定
用程序中,进程中的多个线程共同存在于进程的虚拟地址空数目的线程允许同时进入要同步的代码。
间中,它¨ 共享进程的所有资源。因此,如果发生多个线程同步骤如下:
建立信号量对象变量调用函
时访问或者操作一个资源时,由于操作系统会把每个线程当
数设置初始值。
作是互不相干的任务分别执行,将会使应用程序产生意想不
线程拥有调用函数后,此计
到的结果。因此在应用程序设计过程中,要考虑多个线程如何
数值减。
同步使用进程的共享资源,以免线程间产生冲突。下面详细讨
线程结束调用函数,此汁数
论解决方法。
值加。具体操作见程序注释。源程序如下:
;
二、问题提出及解决方案
假设有一个整数数组,需要按升序赋初值。设用两个线程
, , .,,—
分别进行初始化,一个操作将其赋初值为至,另一个为
,,,
至,本文通过使用临界区、互斥、信号量等方法业解决
,;
线程同步的问题。
.不采用同步技术
—
程序如下,当选择时,同一个数组在两个线程的操作下
:;
得不到预期的结果。
: ;
.临界区
: ;
临界区是指初始化数组的代码放在临界区,一次只能有
:;
一个线程来执行一段代码,另一个线程在第一个线程处理完
:;
之前是不会被执行的。程序如下,当选择时,采用临界区技
:;
术。步骤如下:
初始化临界区调用函数。
:;
使用临界区调用函数后,别;
的线程不能进入代码块—
结束使用临界区调用函数,
可唤醒下一个线程。具体操作见程序注释。;;
.互斥;
互斥类似于临界区,其区别是它可用于跨进程的线程同
陈晓龙茂名学院计算机科学与技术系茂名
· ·
维普资讯
.,., 技术交流微型电脑应用年第卷第期
: ; :
; //进入临界区
. : ; ;
: ,
一: —
:; ; //防止其它线程进入
: ; ::: ,—
: ; ; //防止其它线程进入
:..; : 一: ;
:;
:; //定义临界区变量;
: ; //建立互斥对象句柄变量:
:; //建立信号量对象句柄变量:
.:
:;
:.; //根据输入; //数组赋值
等分别不采用或临界区、互斥、信号量等同步技术。;
:; //不采用同步技术:;
:“; //