本发明涉及计算机程序检测,尤其涉及一种基于c11弱内存模型的c语言程序验证方法及装置。
背景技术:
1、随着计算机硬件和编译器的发展,引入了弱内存模型,这导致了在可用性和性能之间的平衡。c/c++11是第一个处理并发的c/c++标准,它引入了低级原子操作和弱内存模型,以支持高性能的多线程编程。然而,在这样的环境下编写正确且高效的并发代码非常具有挑战性,因为弱内存模型和大量的线程交错可能导致难以预测的行为和错误。因此,如何对c/c++11程序进行有效的检测成为亟需解决的问题。
技术实现思路
1、针对现有技术存在的问题,本发明提供一种基于c11弱内存模型的c语言程序验证方法及装置。
2、第一方面,本发明提供一种基于c11弱内存模型的c语言程序验证方法,包括:
3、基于c语言程序当前对应的弱内存模型中强制执行的一致性公理,确定第一操作对应的顺序一致性约束、修改顺序一致性约束以及读取一致性约束;
4、基于所述第一操作对应的顺序一致性约束、修改顺序一致性约束以及读取一致性约束,验证所述第一操作的可执行性,并得到所述c语言程序的验证结果;
5、其中,所述第一操作包括将所述c语言程序当前任一读取操作所读取的写入操作修改为另一写入操作;
6、所述顺序一致性约束用于约束所述c语言程序中写入操作和读取操作的程序执行顺序,所述修改顺序一致性约束用于约束所述c语言程序中同一内存位置的写入操作的内存修改顺序,所述读取一致性约束用于约束所述c语言程序中不同内存位置的写入操作的内存修改顺序。
7、可选地,所述基于c语言程序当前对应的弱内存模型中强制执行的一致性公理,确定第一操作对应的顺序一致性约束、修改顺序一致性约束以及读取一致性约束,包括:
8、基于所述c语言程序当前对应的弱内存模型中写入操作和读取操作的happens-before关系或者写入操作的内存修改顺序关系,确定所述第一操作对应的顺序一致性约束;并且,
9、基于所述c语言程序当前对应的弱内存模型中写入操作和读取操作的happens-before关系,确定所述第一操作对应的修改顺序一致性约束;并且,
10、基于所述c语言程序当前对应的弱内存模型中写入操作和读取操作的happens-before关系以及写入操作和读取操作的对应关系,确定所述第一操作对应的读取一致性约束。
11、可选地,所述基于所述第一操作对应的顺序一致性约束、修改顺序一致性约束以及读取一致性约束,验证所述第一操作的可执行性,包括:
12、所述基于所述第一操作对应的一致性约束、所述第一操作对应的同步关系约束,以及所述第一操作对应的数据有效性约束,验证所述第一操作的可执行性;
13、所述第一操作对应的一致性约束基于所述第一操作对应的顺序一致性约束、修改顺序一致性约束以及读取一致性约束确定。
14、可选地,所述基于所述第一操作对应的一致性约束、所述第一操作对应的同步关系约束,以及所述第一操作对应的数据有效性约束,验证所述第一操作的可执行性,包括:
15、基于所述第一操作对应的一致性约束、所述第一操作对应的同步关系约束,以及所述第一操作对应的数据有效性约束,确定所述第一操作对应的执行约束;
16、基于可满足性模理论smt求解器,对所述第一操作对应的执行约束进行求解;
17、基于对所述第一操作对应的执行约束进行求解的结果,验证所述第一操作的可执行性。
18、可选地,所述方法还包括:
19、基于所述smt求解器,检查所述第一操作对应的执行约束是否存在断言违例、数据竞争或死锁的情况。
20、可选地,所述方法还包括:
21、在确定所述第一操作可执行的情况下,将所述第一操作应用于所述c语言程序,并更新所述c语言程序当前对应的弱内存模型中强制执行的一致性公理,直到无法确定可执行的所述第一操作。
22、第二方面,本发明还提供一种基于弱内存模型的c语言程序检测装置,包括:
23、确定模块,用于基于c语言程序当前对应的弱内存模型中强制执行的一致性公理,确定第一操作对应的顺序一致性约束、修改顺序一致性约束以及读取一致性约束;
24、验证模块,用于基于所述第一操作对应的顺序一致性约束、修改顺序一致性约束以及读取一致性约束,验证所述第一操作的可执行性,并得到所述c语言程序的验证结果;
25、其中,所述第一操作包括将所述c语言程序当前任一读取操作所读取的写入操作修改为另一写入操作;
26、所述顺序一致性约束用于约束所述c语言程序中写入操作和读取操作的程序执行顺序,所述修改顺序一致性约束用于约束所述c语言程序中同一内存位置的写入操作的内存修改顺序,所述读取一致性约束用于约束所述c语言程序中不同内存位置的写入操作的内存修改顺序。
27、第三方面,本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上所述第一方面所述的基于c11弱内存模型的c语言程序验证方法。
28、第四方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上所述第一方面所述的基于c11弱内存模型的c语言程序验证方法。
29、第五方面,本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述基于c11弱内存模型的c语言程序验证方法。
30、本发明提供的基于c11弱内存模型的c语言程序验证方法及装置,通过弱内存模型中的一致性约束验证程序中每个加载操作可能读取的写操作,来探索并验证并发代码的各种可能行为,从而预测并发代码的行为和错误,提高了c语言程序检测的有效性。
1.一种基于c11弱内存模型的c语言程序验证方法,其特征在于,包括:
2.根据权利要求1所述的基于c11弱内存模型的c语言程序验证方法,其特征在于,所述基于c语言程序当前对应的弱内存模型中强制执行的一致性公理,确定第一操作对应的顺序一致性约束、修改顺序一致性约束以及读取一致性约束,包括:
3.根据权利要求1所述的基于c11弱内存模型的c语言程序验证方法,其特征在于,所述基于所述第一操作对应的顺序一致性约束、修改顺序一致性约束以及读取一致性约束,验证所述第一操作的可执行性,包括:
4.根据权利要求3所述的基于c11弱内存模型的c语言程序验证方法,其特征在于,所述基于所述第一操作对应的一致性约束、所述第一操作对应的同步关系约束,以及所述第一操作对应的数据有效性约束,验证所述第一操作的可执行性,包括:
5.根据权利要求4所述的基于c11弱内存模型的c语言程序验证方法,其特征在于,所述方法还包括:
6.根据权利要求1至5任一项所述的基于c11弱内存模型的c语言程序验证方法,其特征在于,所述方法还包括:
7.一种基于弱内存模型的c语言程序检测装置,其特征在于,包括:
8.一种电子设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述基于c11弱内存模型的c语言程序验证方法。
9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述基于c11弱内存模型的c语言程序验证方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述基于c11弱内存模型的c语言程序验证方法。