spin_lock_init采用什么参数?

问题描述

我想在运行时使用spin_lock函数初始化spin_lock_init,但是不知道它采用什么参数,我从文档中看到它需要指向{{1}的指针}类型,但我不知道如何实现它。我们如何使用该函数在运行时 init 自旋锁?

spinlock_t

解决方法

您的用法是正确的。 spin_lock_init()函数用于需要在运行时初始化自旋锁 的情况。在您的示例中,奇怪的是您在函数内部定义了自旋锁:如果仅在此处定义自旋锁并在函数返回时立即丢弃该自旋锁,它将具有什么目的?通常,您希望能够从不同的功能(或同一功能的不同调用)锁定/解锁它。

因此,您通常希望将自旋锁作为全局变量,例如:

static spinlock_t my_lock;

int __init myinit(void)
{
    spin_lock_init(&my_lock);
    return 0;
}

对于不需要在运行时初始化自旋锁的用法(因为您已经知道需要立即对其进行初始化),可以使用DEFINE_SPINLOCK()宏,该宏将对其进行声明和初始化。在编译时为您节省时间和代码:

static DEFINE_SPINLOCK(my_lock);