【问题标题】:Homework - reader write appender semaphore作业——读者写appender信号量
【发布时间】:2012-02-14 06:38:59
【问题描述】:

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

这是一个问题: “这个问题利用了称为 ReaderWriterAppender 信号量的新同步原语。对于读取器和写入器,适用与 ReaderWriter 信号量相同的规则,并为附加程序添加了这些新规则:

1) 在任何给定时间,最多只能有一个附加程序拥有信号量。
2) appender 和 write 不能同时拥有信号量
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) {

}

问题是,我不知道如何解决这个问题。我知道 reader writer semaphore 是什么,我知道如何使用它们,而且我以前也使用过它们。但我不知道如何实现它们。他们甚至没有告诉我是否可以使用 API 或其他任何东西。基本上,“实现它”

提前致谢,
加西姆

【问题讨论】:

  • 必须缺少一些要求,因为如上所述,您可以使用读/写锁并让rwa_append_lock 调用rwa_write_lock

标签: c multithreading file semaphore


【解决方案1】:

一些提示:

  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()”?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 2019-10-13
    • 2018-04-27
    • 2023-03-19
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多