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

标签 c unix process scheduling freebsd

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

我正在尝试测试试图获取读锁的进程是否会被阻塞,直到它能够获取它。在进程 #1 中初始化 rw_lock 并作为写入者锁定锁后,我创建了第二个进程,它尝试使用阻塞 rw_rlock() 作为读取者获取锁。我正在拍摄的是进程 #2 被阻塞,直到进程 #1 释放写锁,所以我试图使用暂停来确保进程 #2 有足够的时间进行调度。然而,在这种情况下,同样的暂停会以某种方式使系统崩溃,因为如果删除它,程序运行良好。如果我用进程 #1 中的繁忙循环替换暂停,则进程 #2 在进程 #1 完成之前不会被安排,因此它会破坏测试点。 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);
}

最佳答案

在持有 rw 锁的同时 sleep 是一个禁忌。

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

相关文章:

c - 现场 libcurl http 身份验证

c - 处理多种结构类型的队列 [C]

linux - Lubuntu 上的 gcc 无法正常工作

C++/C : Move Directory to Another Location

c# - 删除另一个进程正在使用的文件

c - 优化相关矩阵的计算

c - 如何在C中异或两个字符串?

java - 在学校的 Unix 系统上编译文件时出现问题

c - 在 C 中等待兄弟进程

c - popen 创建一个额外的 sh 进程