c - 作业——reader写appender信号量

标签 c multithreading file semaphore

我有一个作业问题,我真的不知道如何开始。

问题如下: “这个问题利用了称为 ReaderWriterAppender 信号量的新同步原语。与 ReaderWriter 信号量一样,同样的规则适用于读者和作者,并为附加程序添加了这些新规则:

1) 在任何给定时间,不能有超过一个 appender 拥有信号量。
2) 一个appender和write不能同时拥有semaphore
3) 读取可以在追加期间发生"

我需要自己实现。

有给定的结构

typedef struct {
   //structure here
} rwasem_t;

void rwalock_init(rwasem_t * rwa) {

}

void rwa_read_lock(rwasem_t * rwa) {

}

void rwa_write_lock(rwasem_t * rwa) {

}

void rwa_append_lock(rwasem_t * rwa) {

}

void rwa_append_unlock(rwasem_t * rwa) {

}

问题是,我不知道如何解决这个问题。我知道读写器信号量是什么,我知道如何使用它们,而且我以前用过它们。但我不知道如何实现它们。他们甚至不告诉我是否可以使用 API 或任何东西。基本上,“实现它”

提前致谢,
加西姆

最佳答案

一些提示:

  1. appender 和 read 有什么区别?

  2. 如果你只对 appender 使用读锁呢?举出一个例子,它们是不同的。

  3. 我可以在 appender 案例中再添加一把锁来防止 (2) 中的案例吗?

伪代码:

ReadWriteLock lock_a, lock_b;

void rwa_read_lock(rwasem_t * rwa) {
    lock_a.do_somethingA();
    lock_b.do_somethingB();   // is this needed?
}

void rwa_write_lock(rwasem_t * rwa) {
    lock_a.do_somethingC();
    lock_b.do_somethingD();   // is this needed?
}

void rwa_append_lock(rwasem_t * rwa) {
    lock_a.do_somethingE();
    lock_b.do_somethingF();   // is this needed?
}

什么是“do_somethingX()”?

加锁的顺序重要吗?如果是,正确的顺序是什么?

关于c - 作业——reader写appender信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9272750/

相关文章:

c - SDL OpenGL 纹理受到绿色调的困扰

c - 如何缓冲逐个字节读取的数据并将它们作为序列发送?

multithreading - @Async 与 Spring 中的 Reactor 线程池

multithreading - 使用 std::future 和 valgrind 的一次性事件通信

android - 从内容 URI 获取文件路径

c - 使用 C 在 OpenGL 中绘制多个对象

c - 在 C 中的 unsigned char 中搜索关键字

python-3.x - Python 3套接字客户端未连接到服务器

c++ - 电源故障后 Windows 操作系统中的文件损坏

c - 如何从文件中读取一个数组,对其进行排序,并将其打印到另一个文件中?