一种条件变量和互斥锁的实现的方法、装置、设备及介质与流程

文档序号:34112232发布日期:2023-05-10 22:37阅读:45来源:国知局
一种条件变量和互斥锁的实现的方法、装置、设备及介质与流程

本发明涉及计算机领域,并且更具体地涉及一种用于线程同步的条件变量和互斥锁的实现的方法、装置、设备及可读介质。


背景技术:

1、为避免多个线程同时访问一个数据而造成数据混乱,确保在任何时间点一个共享的资源只被一个线程使用,保证数据的有效性,因此需要进行线程间的同步。

2、操作系统提供了临界区对象、互斥对象、事件对象、信号量对象等同步对象来实现线程同步,这些同步对象都属于内核对象。内核对象是操作系统创建和管理的,存在内核之中,应用程序不能在内存中直接访问内核对象,也不能改变它们的内容,只能通过系统函数来操作。

3、临界区对象通过一个所有线程共享的对象来实现线程同步。线程要访问被临界区对象保护的资源,需要先拥有该临界区对象。如果另一个线程要访问资源,则必须等待上一个访问资源的线程释放临界区对象。

4、只有拥有互斥对象的线程才具有访问资源的权限,互斥对象的使用通常要结合等待函数,当没有线程拥有互斥对象时,系统会为互斥对象设置为有信号状态。此时如有线程在等待该互斥对象,则线程可以获得该互斥对象,此时系统会将互斥对象设置为无信号状态。如果又有线程在等待,则只能一直等待下去,直到拥有互斥对象的线程释放互斥对象,然后系统重新设置互斥对象为有信号状态。

5、事件对象和互斥对象有点类似,但功能更多一些。当等待的事件有信号状态时,等待事件对象的线程得以恢复,继续执行;如果等待的事件对象处于无信号状态,则等待该对象的线程将挂起。事件可以分为两种:手动事件和自动事件。手动事件是当事件对象处于有信号状态时,它会一直处于这个状态,一直到调用函数将其设置为无信号状态为止。自动事件是指当事件对象处于有信号状态时,如果一个线程等待到该事件对象的信号后,事件对象就自动变为无信号状态了。现有技术中条件变量和互斥锁不同时使用,生产者尚未准备好时,消费者一次次的轮询而引起cpu时间的浪费。


技术实现思路

1、有鉴于此,本发明实施例的目的在于提出一种用于线程同步的条件变量和互斥锁的实现的方法、装置、设备及可读介质,通过使用本发明的技术方案,能够防止多线程对数据同时进行读写,解决资源的冲突访问,能够提高代码执行效率,能够避免cpu资源的浪费。

2、基于上述目的,本发明的实施例的一个方面提供了一种用于线程同步的条件变量和互斥锁的实现的方法,包括以下步骤:

3、将临界区对象、事件对象、临界区对象相关操作和事件对象相关操作封装为条件变量,将互斥对象和互斥对象相关操作封装为互斥锁;

4、响应于第一线程访问资源,第一线程加上互斥锁;

5、响应于当前条件不能满足第一线程继续执行,第一线程创建条件变量并释放互斥锁;

6、响应于第二线程加上互斥锁并满足条件变量,第二线程将条件变量置为有信号状态并释放互斥锁;

7、响应于第一线程感知到条件变量变为有信号状态,第一线程加上互斥锁并继续执行。

8、根据本发明的一个实施例,还包括:

9、设置线程等待条件变量的时间阈值。

10、根据本发明的一个实施例,还包括:

11、响应于第一线程超过时间阈值未感知到条件变量变为有信号状态,第一线程结束等待并放弃访问资源。

12、根据本发明的一个实施例,还包括:

13、响应于当前条件不能满足第一线程继续执行,第一线程创建多个条件变量并释放互斥锁;

14、响应于第一线程感知到全部条件变量都变为有信号状态,第一线程加上互斥锁并继续执行。

15、本发明的实施例的另一个方面,还提供了一种用于线程同步的条件变量和互斥锁的实现的装置,装置包括:

16、封装模块,封装模块配置为将临界区对象、事件对象、临界区对象相关操作和事件对象相关操作封装为条件变量,将互斥对象和互斥对象相关操作封装为互斥锁;

17、锁定模块,锁定模块配置为响应于第一线程访问资源,第一线程加上互斥锁;

18、创建模块,创建模块配置为响应于当前条件不能满足第一线程继续执行,第一线程创建条件变量并释放互斥锁;

19、更改模块,更改模块配置为响应于第二线程加上互斥锁并满足条件变量,第二线程将条件变量置为有信号状态并释放互斥锁;

20、执行模块,执行模块配置为响应于第一线程感知到条件变量变为有信号状态,第一线程加上互斥锁并继续执行。

21、根据本发明的一个实施例,还包括设置模块,设置模块配置为:

22、设置线程等待条件变量的时间阈值。

23、根据本发明的一个实施例,设置模块还配置为:

24、响应于第一线程超过时间阈值未感知到条件变量变为有信号状态,第一线程结束等待并放弃访问资源。

25、根据本发明的一个实施例,还包括感知模块,感知模块配置为:

26、响应于当前条件不能满足第一线程继续执行,第一线程创建多个条件变量并释放互斥锁;

27、响应于第一线程感知到全部条件变量都变为有信号状态,第一线程加上互斥锁并继续执行。

28、本发明的实施例的另一个方面,还提供了一种计算机设备,该计算机设备包括:

29、至少一个处理器;以及

30、存储器,存储器存储有可在处理器上运行的计算机指令,指令由处理器执行时实现上述任意一项方法的步骤。

31、本发明的实施例的另一个方面,还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现上述任意一项方法的步骤。

32、本发明具有以下有益技术效果:本发明实施例提供的用于线程同步的条件变量和互斥锁的实现的方法,通过将临界区对象、事件对象、临界区对象相关操作和事件对象相关操作封装为条件变量,将互斥对象和互斥对象相关操作封装为互斥锁;响应于第一线程访问资源,第一线程加上互斥锁;响应于当前条件不能满足第一线程继续执行,第一线程创建条件变量并释放互斥锁;响应于第二线程加上互斥锁并满足条件变量,第二线程将条件变量置为有信号状态并释放互斥锁;响应于第一线程感知到条件变量变为有信号状态,第一线程加上互斥锁并继续执行的技术方案,能够防止多线程对数据同时进行读写,解决资源的冲突访问,能够提高代码执行效率,能够避免cpu资源的浪费。



技术特征:

1.一种用于线程同步的条件变量和互斥锁的实现的方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的方法,其特征在于,还包括:

3.根据权利要求2所述的方法,其特征在于,还包括:

4.根据权利要求1所述的方法,其特征在于,还包括:

5.一种用于线程同步的条件变量和互斥锁的实现的装置,其特征在于,所述装置包括:

6.根据权利要求5所述的装置,其特征在于,还包括设置模块,所述设置模块配置为:

7.根据权利要求6所述的装置,其特征在于,所述设置模块还配置为:

8.根据权利要求5所述的装置,其特征在于,还包括感知模块,所述感知模块配置为:

9.一种计算机设备,其特征在于,包括:

10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-4任意一项所述方法的步骤。


技术总结
本发明提供了一种用于线程同步的条件变量和互斥锁的实现的方法、装置、设备及可读介质,方法包括:将临界区对象、事件对象、临界区对象相关操作和事件对象相关操作封装为条件变量,将互斥对象和互斥对象相关操作封装为互斥锁;响应于第一线程访问资源,第一线程加上互斥锁;响应于当前条件不能满足第一线程继续执行,第一线程创建条件变量并释放互斥锁;响应于第二线程加上互斥锁并满足条件变量,第二线程将条件变量置为有信号状态并释放互斥锁;响应于第一线程感知到条件变量变为有信号状态,第一线程加上互斥锁并继续执行。通过使用本发明的方案,能够防止多线程对数据同时进行读写,解决资源的冲突访问,能够提高代码执行效率。

技术研发人员:杨勇
受保护的技术使用者:济南浪潮数据技术有限公司
技术研发日:
技术公布日:2024/1/12
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1