【问题标题】:C - Block others from writing to a fileC - 阻止其他人写入文件
【发布时间】:2015-04-11 09:54:13
【问题描述】:

我有多个进程写入 FIFO 文件。当其中一个正在写入时,我想阻止其他进程写入文件。

我正在使用读写调用来访问 FIFO 文件。

示例:有两个 C 程序 Server.c 和 Client.c。多个客户端正在写入由服务器程序创建的 FIFO 文件。服务器应该能够随时读取和写入文件,因为一次只有一个客户端可以访问该文件。

【问题讨论】:

  • 可以考虑进程间同步方式,互斥量,信号量等
  • 对不起,我问的问题不够清楚,我已经编辑过了,写入文件的客户端是相互独立的。我可以为他们使用信号量吗

标签: c permissions fifo


【解决方案1】:

尝试使用锁定机制。尝试并发读取和独占写入机制 (CREW) 实现。

 void ReaderThread::run()
    {
        ...
        semaphore++;
        read_file();
        semaphore--;
        ...
    }

    void WriterThread::run()
    {
        ...
        semaphore += MaxReaders;
        write_file();
        semaphore -= MaxReaders;
        ...
    }

使用此解决方案,最多 MaxReaders 线程可以同时读取文件。一旦写入线程想要修改文件,它就会尝试分配所有信号量的资源,从而确保在写入操作期间没有其他线程可以访问该文件。

【讨论】:

  • 如果在调用 open 函数进行写入时不使用 O_UNBLOCK 会阻塞文件直到某个进程从中读取?
  • 对不起,我问的问题不够清楚,我已经编辑过了,如何使用信号量、互斥锁来解决这个特定问题
  • 注意您的服务器可以随时访问的策略。当客户端在服务器端写入和读取锁时,您需要写锁,这将确保队列上只有完整的数据。
猜你喜欢
  • 2019-11-13
  • 1970-01-01
  • 2013-07-30
  • 2016-05-24
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多