unix DECLARE_WAIT_QUEUE_HEAD(var)var prototype?

时间:2010-05-22 12:38:15

标签: c unix linux-kernel

我想在模块中使用2队列,我将指针更改为它们 因此我需要使用:

//declartion
wait_queue_head_t **currentQ;
DECLARE_WAIT_QUEUE_HEAD (readWaitQ1);
DECLARE_WAIT_QUEUE_HEAD (readWaitQ2);

if(condition){
    currentQ = &readWaitQ1;
}else{
    currentQ = &readWaitQ2;
}

但我得到了wake_up使用队列的其他东西的错误类型。 甚至以为我谷歌它我找不到答案有人可以给我原型所需吗?...

1 个答案:

答案 0 :(得分:1)

由于宏是(见here):

#define DECLARE_WAIT_QUEUE_HEAD(name) \
    wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name)

这意味着:

DECLARE_WAIT_QUEUE_HEAD (readWaitQ1);

转换为:

wait_queue_head_t readWaitQ1 = ...;

现在使用您当前的代码:

wait_queue_head_t **currentQ;
currentQ = &readWaitQ1;

你在currentQ上有太多的间接。你应该试试:

wait_queue_head_t *currentQ;

代替。