我有多个进程写入FIFO文件。虽然其中一个是写作,但我想阻止其他进程写入文件。
我正在使用读写调用来访问FIFO文件。
示例:有两个C程序Server.c和Client.c。多个客户端正在写入由服务器程序创建的FIFO文件。服务器应该能够随时读取和写入文件,因为一次只有一个客户端可以访问该文件。
答案 0 :(得分:0)
尝试使用锁定机制..并发读取和独占写入机制(CREW)实现。
void ReaderThread::run()
{
...
semaphore++;
read_file();
semaphore--;
...
}
void WriterThread::run()
{
...
semaphore += MaxReaders;
write_file();
semaphore -= MaxReaders;
...
}
使用此解决方案,MaxReaders线程可以同时读取文件。只要编写器线程想要修改文件,它就会尝试分配所有信号量的资源,从而确保在写操作期间没有其他线程可以访问该文件。