好的,这是我觉得奇怪的代码片段:
printf("di consumerthread : mulai isi data, itmsg = %d\n",itmsg);
msgq->data[itmsg]=rec_data;
printf("di consumerthread : selesai isi data, itmsg = %d\n",itmsg);
我发现奇怪的是输出:
di consumerthread : mulai isi data, itmsg = 42
di consumerthread : selesai isi data, itmsg = 98
itmsg
变量如何在此行之后突然从42
更改为98
?
msgq->data[itmsg]=rec_data;
有人可以告诉我如何解决这个问题以及这个奇怪输出的原因吗?
答案 0 :(得分:4)
也许msgq-> data [itmsg]是itmsg的别名。它可能发生。如果你继承了这段代码,就在它上运行一个边界检查器。
答案 1 :(得分:4)
数据阵列的大小是多少?你是在写下它的界限吗?
有可能通过将rec_data分配给msgq-> data [itmsg]来覆盖itmsg。如果他们被宣布为彼此靠近,这是非常可能的。
答案 2 :(得分:0)
如果不能仅根据问题中的信息确定无疑,问题可能是多个线程同时访问相同的内存位置(msgq->data[itmsg]
),而没有任何正确的同步。< / p>
答案 3 :(得分:-1)
您是否有两个或更多线程都使用itmsg
变量?您的代码段中没有任何内容可以更改该变量的值,因此看起来它必须是另一个正在更改它的线程。
如果您正在使用线程,则需要使用互斥锁保护他们共享的任何数据。
答案 4 :(得分:-1)
好的,我终于找到了什么错误
很抱歉,如果我没有给你足够的信息,因为我的头很乱,要详细解释它。
所以,我要解决的是: 将所有类型的全局变量(包括itmsg)更改为static 以及将全局变量用于静态
的所有类型的过程和函数它解决了我所有的问题!
虽然我还不知道什么是静态功能..
感谢您的帮助! :d