在许多C/C++宏中,我看到宏的代码包含在看似无意义的do while循环中.这是一些例子.
#define FOO(X) do { f(X); g(X); } while (0)
#define FOO(X) if (1) { f(X); g(X); } else
Run Code Online (Sandbox Code Playgroud)
我看不出它do while在做什么.为什么不在没有它的情况下写这个?
#define FOO(X) f(X); g(X)
Run Code Online (Sandbox Code Playgroud) 虽然本论坛和所有其他论坛多次讨论过这个话题,但我仍有疑问.请帮忙.
do{} while(0)in-macro 如何在Linux内核中工作?例如,
#define preempt_disable() do { } while (0)
Run Code Online (Sandbox Code Playgroud)
它如何禁用抢占?
#define might_resched() do { } while (0)
Run Code Online (Sandbox Code Playgroud)
它是如何重新安排的?
类似地,我已经看到了互斥锁和其他宏的宏.这有什么用?我理解以下问题,但不是上面的例子.
#define foo(x) do { do something } while(0)
Run Code Online (Sandbox Code Playgroud)
编辑:
以下代码怎么样rt_mutex_lock?
/**
* rt_mutex_lock - lock a rt_mutex
*
* @lock: the rt_mutex to be locked
*/
void __sched rt_mutex_lock(struct rt_mutex *lock)
{
might_sleep();
rt_mutex_fastlock(lock, TASK_UNINTERRUPTIBLE, 0, rt_mutex_slowlock);
}
EXPORT_SYMBOL_GPL(rt_mutex_lock);
/*
* debug aware fast / slowpath lock,trylock,unlock
*
* The atomic acquire/release ops are compiled away, …Run Code Online (Sandbox Code Playgroud)