操作系统:Oracle虚拟机虚拟机上的FreeBSD 8.2
我正在尝试测试试图获取读锁的进程将被阻止,直到它能够获取它为止。在初始化进程1中的rw_lock并将锁锁定为writer之后,我创建了第二个进程,该进程尝试使用blockingrw_rlock()将锁获取为reader。我的目标是阻止进程2,直到进程1释放写锁,所以我试图使用pause来确保进程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);
}

最佳答案

抱着遥控门锁睡觉是不允许的。

关于c - 使用读/写锁时操作系统崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11785379/

10-10 09:08