gpt4 book ai didi

CBMC 在我的 Pthreads 程序中检测到断言错误,是否正确?

转载 作者:行者123 更新时间:2023-12-04 17:54:14 25 4
gpt4 key购买 nike

我使用 CBMC 验证我的 Pthreads 程序,它检测到一些我认为不会存在的断言错误。该错误仅在我同时运行两个线程时发生。也就是说,当我把其中一个调用线程函数的语句(funcfunc1)放到注释中,CBMC 就可以验证成功了。数组ab的赋值是否有冲突?

int a[4], b[4];

static void * func(void * me)
{
int i;
for(i=0; i<2; i++){
a[i] = b[i] = i;
assert( a[i] == i ); //failed
}
return ((void *) 0);
}

static void * func1(void * me)
{
int i;
for(i=2; i<4; i++){
a[i] = b[i] = i;
assert( a[i] == i ); //failed
}
return ((void *) 0);
}

int main(){
pthread_t thr1;
pthread_create(&thr1, NULL, func1, (void *)0);
(*func)(0);
pthread_join(thr1,NULL);

return 0;
}

The output of CBMC is as following:

Violated property:
file pthreads4.c line 25 function func1
assertion a[i] == i
a[(signed long int)i] == i

VERIFICATION FAILED

最佳答案

这看起来是 CBMC 方面的误报。

我们可以看到主线程会修改a[0],a[1],b[0],b[1]

线程thr1修改a[2], a[3], b[2], and b[3]

线程之间实际上没有重叠访问,因此该程序的行为应该像顺序运行一样。

CBMC 生成的错误跟踪也没有多大意义:

Counterexample:

State 19 file test.c line 27 function main thread 0
----------------------------------------------------
thr1=1ul (00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001)

State 22 file test.c line 28 function main thread 0
----------------------------------------------------
thread=&thr1!0@1 (00000010 00000000 00000000 00000000 00000000 00000000 00000000 00000000)

State 23 file test.c line 28 function main thread 0
----------------------------------------------------
attr=((union pthread_attr_t { char __size[56l]; signed long int __align; } *)NULL) (00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000)

State 24 file test.c line 28 function main thread 0
----------------------------------------------------
start_routine=func1 (00000011 00000000 00000000 00000000 00000000 00000000 00000000 00000000)

State 25 file test.c line 28 function main thread 0
----------------------------------------------------
arg=NULL (00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000)

State 47 file test.c line 29 function main thread 0
----------------------------------------------------
me=NULL (00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000)

State 48 file test.c line 8 function func thread 0
----------------------------------------------------
i=0 (00000000 00000000 00000000 00000000)

State 49 file test.c line 9 function func thread 0
----------------------------------------------------
i=0 (00000000 00000000 00000000 00000000)

State 51 file test.c line 10 function func thread 0
----------------------------------------------------
b[0l]=0 (00000000 00000000 00000000 00000000)

State 52 file test.c line 10 function func thread 0
----------------------------------------------------
a[0l]=0 (00000000 00000000 00000000 00000000)

State 54 file test.c line 9 function func thread 0
----------------------------------------------------
i=1 (00000000 00000000 00000000 00000001)

State 57 file test.c line 10 function func thread 0
----------------------------------------------------
b[1l]=1 (00000000 00000000 00000000 00000001)

State 58 file test.c line 20 function func1 thread 1
----------------------------------------------------
b[2l]=2 (00000000 00000000 00000000 00000010)

State 59 file test.c line 20 function func1 thread 1
----------------------------------------------------
a[2l]=2 (00000000 00000000 00000000 00000010)

State 61 file test.c line 19 function func1 thread 1
----------------------------------------------------
i=3 (00000000 00000000 00000000 00000011)

State 64 file test.c line 10 function func thread 0
----------------------------------------------------
a[1l]=0 (00000000 00000000 00000000 00000000)

Violated property:
file test.c line 11 function func
assertion a[i] == i
a[(signed long int)i] == i


VERIFICATION FAILED

这个反例声称 a[1] == 0。然而,状态 64 显示 0 被分配给 a[1],即使最后写入 b[1] 的值是 1 在状态 57 中。

关于CBMC 在我的 Pthreads 程序中检测到断言错误,是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52068850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com