使用ucontext.h的信号量

时间:2013-04-26 00:21:31

标签: c synchronization mutex semaphore ucontext

基本上我花了15个小时没有睡觉试图找出信号量。任何人都可以向我解释我目前的代码有什么问题吗?我相信我的问题在于P()。我似乎无法弄清楚如何正确阻止和交换。

这是作业,但到期日过去了,我只是想弄明白。

这是我的代码:

AddQueue(head, node); //adds a node to a queue

void P(semaphore_t *sem)
{
    if (--sem->value < 0) 
    {
        //runQ is the Queue that holds threads that are ready to be executed
        Queue *temp = DeleteQueue(&runQ); //deletes and returns the head
        AddQueue(&(sem->tcb), temp);    
        swapcontext(&(temp->context), &(runQ->context));
    }
}

void V(semaphore_t *sem)
{
    if (sem->value++ < 0)
    {           
        AddQueue(&runQ, DeleteQueue(&(sem->tcb)));
    }
    yield(); //this function rotates the queue and runs the new head thread     
}

因此,此代码导致我编写的生产者/消费者程序中的段错误进行测试。我将缓冲区大小设置为4,生产者在使用任何项目之前生成第5项,然后崩溃。

有什么想法吗?

0 个答案:

没有答案