我有一个运行两个线程的程序 - 它们使用消息队列进行通信。
在一个线程中,我调用 ioctl() 来访问硬件解密器。代码如下:
void Decrypt
{
...
..
...
if(<condition 1>)
{.
...
...
retVal = ioctl(...);
comesInHere1++;
}
if(<condition 2>)
{
...
...
retVal = ioctl(...);
comesInHere2++;
}
comesInHere1 和 comesInHere2 用于计算它进入特定 if 循环的次数。
整个程序执行需要 80 毫秒。但是,如果我注释掉测试变量(if 循环中的 comesInHere1、comesInHere2),执行时间会增加 8 毫秒,达到 88 毫秒!
这怎么可能?我现在不能注释掉变量,因为它增加了花费的时间,也不能保留它们——会在代码审查中被杀死:)
请告诉我
谢谢
最佳答案
缓存?有可能通过添加更多数据将代码移动到不同的缓存行,这些缓存行会以某种方式放置在一起,从而导致抖动。您可以通过在不同系统上运行并在每个线程中独占使用的变量之间添加填充数据来进行试验。
如果将处理序列化到单个内核上会怎样?
关于c - ioctl 和执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3751346/