在用户空间应用程序中使用自旋锁

akp*_*akp 3 c linux locking linux-device-driver linux-kernel

我正在尝试创建一个具有结构的内核模块,我想在用户空间应用程序中使用相同的结构,并且该应用程序与给定的模块一起工作。

主要问题是这个结构包含一个名为spinlock_t type. 在内核中用于锁定但不知道如何在用户空间应用程序中使用它。

struct new_struct
{
  ...some variable...
  spinlock_t u_lock;
};
Run Code Online (Sandbox Code Playgroud)

有没有办法在用户空间应用程序中使用自旋锁。

或者是否有任何其他锁定技术可以在内核和用户空间中使用,以便如果锁定由用户应用程序持有,内核模块应该无法获得它,反之亦然。

小智 8

内核自旋锁不适用于用户空间,因为如果使用 _irqsave/_irqrestore,它将禁用抢占和禁用 IRQ。在用户空间中甚至不可能进行抢占或 IRQ 禁用。

最好的尝试是pthread_spin_lock()我认为。