c/c++语言开发共享自旋锁初始化函数

要在内核v4.19-rc5中初始化自旋锁,必须使用如下定义的spin_lock_init宏:

 #define spin_lock_init(_lock)  do {  spinlock_check(_lock);  raw_spin_lock_init(&(_lock)->rlock);  } while (0) 

函数spinlock_check(_lock)只返回&lock->rlock 。 本文解释说:

spinlock_check的实现非常简单,这个函数只返回给定自旋锁的raw_spinlock_t,以确保我们得到完全正常的原始自旋锁

我不明白这个函数是如何执行检查的 。 我期待ckeck函数中的一些if语句。 对不起,我是内核编程的新手。

    它不需要任何if语句,因为它存在用于编译时检查。

    您可以在此处看到,大多数自旋锁操作都被定义为宏,因此它们无法限制其参数的类型。

    请考虑以下示例:

     struct not_a_spinlock { raw_spinlock_t rlock; }; 

    没有spinlock_check我可以使用spin_lock_init来初始化它:

     struct not_a_spinlock spin; spin_lock_init(&spin); 

    但是由于spinlock_check ,这不起作用。 这使得这些宏受到类型限制,因此它们更像function。

    它返回&lock->rlock的原因是方便 – 它的返回值可以传递给下一个函数。

    因此,从您的示例中重写宏可能值得:

     #define spin_lock_init(_lock)  do {  raw_spin_lock_init(spinlock_check(_lock));  } while (0) 

    类似的技术可以与宏一起用来限制它们的参数类型,如下所示:

     #define min(x, y) ({  typeof(x) _min1 = (x);  typeof(y) _min2 = (y);  (void) (&_min1 == &_min2);  _min1 < _min2 ? _min1 : _min2; }) 

      以上就是c/c++开发分享自旋锁初始化函数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/549928.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐