spinlock

    0热度

    1回答

    我正在努力正确实现内核螺旋锁与返回语句的结合,该语句应该向用户空间返回一个值。我实现了一个内核系统调用“sys_kernel_entropy_is_recording”这应该返回的内核变量“is_kernel_entropy_recording”的值: asmlinkage bool sys_kernel_entropy_is_recording(void) { spin_l

    0热度

    1回答

    我是一名计算机科学专业的学生,​​我有一项任务要求我使用螺旋锁来锁定线程,并在其关键部分完成后解锁。困难是我搜索了很多次,但我没有找到任何有用的信息。例如,我试图包含像#include <linux/spinlock.h>这样的头文件,但是当我使用gcc编译这个c程序时,它说无法找到这样的头文件。那么,我应该包含什么头文件,以及为了使用螺旋锁需要调用哪些函数?

    5热度

    1回答

    我的代码中有一个自旋锁,它在两个线程之间共享。当一个线程持有锁而另一个线程试图获得锁时,第二个线程将继续在处理器上旋转。那么如果在线程正在旋转锁的处理器上发生中断,会发生什么? 我已经使用spin_lock()来取锁而不是spin_lock_irqsave(),因为我不想在本地处理器上禁用中断。 当我在内核中检查spin_lock()函数的代码时,我发现默认情况下禁用抢占并且没有任何IRQ。所以我

    0热度

    1回答

    我正在修复与一个库中的并发访问集合有关的一个错误。目前,库使用互斥锁(锁)来控制来自多个线程的访问。代码中的锁定区域包含应该执行得相当快的代码(修改列表/字典或从中读取),因此旋转锁定似乎与此场景匹配。 但是... 在大多数情况下,锁定不是必须的,因为使用这个库的大多数应用程序都是单线程的,对我来说不要放慢速度很重要。 天真的基准测试表明自旋锁检查速度较慢,没有使用资源,但我不完全信任它。

    0热度

    1回答

    与ftrace类似,我有一个函数,它打印armv7板上引导内核时调用的所有函数的地址。在功能调用setup_arch功能之前地址被正确打印,但在此之后,随机地址被打印。我认为它是自旋锁的问题,因为映射时这些地址涉及的功能如_raw_spin_lock_irqsave和add_preempt_count。它可能不是螺旋锁问题。 关于如何解决它的任何建议?

    0热度

    1回答

    我只是想知道,假设PC有多核。有三个线程在三个不同的内核中运行。线程(T1)在核心(C1)获得了自旋锁(S)并获得了T1的锁定,同时在核心C2和C3中运行的T2和T3线程尝试获取锁并等待释放锁。一旦T1线程释放锁定哪个线程将获得锁定T2或T3?我正在考虑T2和T3的相同优先级,并且同时在不同的内核中等待。

    0热度

    1回答

    对于这种情况:进程B将等待进程A释放自旋,因此预先排好? Process A: -->spin lock --> do strict call --> before unlock time int Time int ISR: --> Process A time slice finished --> need schedule -->ISR ret --> schedule to Process

    0热度

    1回答

    我对驱动程序环境中的自旋锁和延迟有一个普遍问题。我有一个可以在gpio中读写的Linux驱动程序。读写操作在单个引脚上完成,并且完全基于时序(HDQ协议)。最初的驱动程序是使用udelay()调用实现的,最糟糕的场景是大约500 us。 驱动程序没有实现任何中断,只是在使用常规gpio_get_value()和gpio_set_value()的特定GPIO中进行定期读写。 在这些延迟之间,驱动程序

    1热度

    1回答

    这是一个典型的CLH锁在java中: public class CLHLock{ private final AtomicReference tail; // why we need this node? private final ThreadLocal myPred; private final ThreadLocal myNode;

    0热度

    1回答

    我使用下面的API来杀死一个tasklet: tasklet_kill(); 虽然杀微进程,我一直在使用spin_lock_irqsave禁用本地中断。为什么内核引发以下消息(警告): Attempt to kill taskletlet from interrupt 这难道不是最好使用tasklet_kill()一边拿着用spin_lock?