使用读/写锁时,操作系统崩溃

时间:2012-08-02 20:38:37

标签: c unix process scheduling freebsd

操作系统:Oracle VM Virtual Box上的FreeBSD 8.2

我正在尝试测试尝试获取读锁定的进程将被阻止,直到它能够获取它为止。在进程#1中初始化rw_lock并将锁作为编写器锁定后,我创建了第二个进程,尝试使用阻塞rw_rlock()获取锁作为读取器。我正在拍摄的是阻止进程#2直到进程#1释放写锁定所以我试图使用暂停来确保进程#2有足够的时间进行调度。但是,在这种情况下,同样的暂停会以某种方式崩溃系统,因为如果删除它,程序运行正常。如果我在进程#1中用忙循环替换暂停,则在进程#1完成之前,进程#2不会被调度,因此它会破坏测试点。 DELAY()也不允许安排进程#2。任何指针都会受到赞赏。

流程#1:

static void test_rw_rlock(void)
{ 
    const int seconds = 1;
    rw_init(pResourceLock, "RWLock");
    rw_wlock(pResourceLock);
    kproc_create(&use_rw_rlock, NULL, NULL, 0, 0, "use_rw_rlock()");
    pause("---", hz * seconds);
    rw_wunlock(pResourceLock);
    rw_destroy(pResourceLock);
}

流程#2:

static void use_rw_rlock(void* arg)
{
    rw_rlock(pResourceLock);
    rw_unlock(pResourceLock);
    kproc_exit(0);
}

1 个答案:

答案 0 :(得分:1)

按住rw锁睡觉是禁忌。