我需要了解& tcb - >上下文由编译器解释

时间:2015-03-11 00:41:42

标签: c multithreading operating-system scheduling

我在实现非抢占式调度时遇到了用于初始化TCB的代码。

typedef struct TCB_t {
    struct TCB_t     *next;
     struct TCB_t     *prev;
     ucontext_t      context;
} TCB_t;


void init_TCB (TCB_t *tcb, void *function, void *stackP, int stack_size)
{
    memset(tcb, '\0', sizeof(TCB_t));
    getcontext(&tcb->context);              
    tcb->context.uc_stack.ss_sp = stackP;
    tcb->context.uc_stack.ss_size = (size_t) stack_size;
    makecontext(&tcb->context, function, 0);  // context is now cooked
}

我知道在上面的代码中获取上下文需要一个指向上下文的指针...但无法理解编译器如何解释&tcb->context ... & tcb - >上下文或&(tcb - > context).....

2 个答案:

答案 0 :(得分:3)

它被解释为&(tcp->context)->的优先级高于&。您可以找到运算符优先级列表here

答案 1 :(得分:1)

getcontext(&tcb->context);

使用您已展示的代码中的线索,您可以推断出可以解释为&(tcb->context)

(&tcb)->context没有任何意义。我们知道,在此函数中,参数声明为TCB_t *tcb,这意味着(&tcb)的类型为TCB_t **。您只能在指向结构的指针上使用->,而不能在双指针上使用。{/ p>

因此,必须将其解释为&(tcb->context)。使用getcontext的函数原型,您可以通过查看它需要ucontext_t *参数来确认这一点,这是您获取&的地址context时所获得的参数1}} TCB_t的成员。