c - ioctl 和执行时间

标签 c linux multithreading embedded linux-kernel

我有一个运行两个线程的程序 - 它们使用消息队列进行通信。

在一个线程中,我调用 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/

相关文章:

c++ - 为什么在 C 中不能重载?

c - 使用fgetc读取文件时出现垃圾字符

linux - 尽管存在必要的权限,但复制时权限被拒绝

linux - 我的服务器重载了吗?

python - Python 中的命名信号量?

c# - 运行 System.Diagnostics 进程时如何在线程之间传递对象

arrays - 如何一次运行多个后台线程任务?

c++ - C 中 OpenMP 并行编程的性能

linux - Linux 上的 Zigbee 堆栈(主线内核)?

c++ - 从选项卡控件项获取文本失败