c语⾔中锁的⽤法,c–使⽤锁⽂件作为多个进程之间的锁的正确
⽅法
我有⼀种情况,其中2个不同的进程(我的C,其他由JAVA中的其他⼈完成)是来⾃某个共享数据⽂件的编写者和读者.所以我试图通过编写这样的类来避免竞争条件(编辑:这个代码坏了,它只是⼀个例⼦)
class ReadStatus
{
bool canRead;
public:
ReadStatus()
{
exists的用法if (filesystem::exists(noReadFileName))
{
canRead = false;
return;
}
ofstream noWriteFile;
noWriteFile.open (noWriteFileName.c_str());
if ( ! noWriteFile.is_open())
{
canRead = false;
return;
}
boost::this_thread::sleep(boost::posix_time::seconds(1));
if (filesystem::exists(noReadFileName))
{
filesystem::remove(noWriteFileName);
canRead= false;
return;
}
canRead= true;
}
~ReadStatus()
{
if (filesystem::exists(noWriteFileName))
filesystem::remove(noWriteFileName);
}
inline bool OKToRead()
{
return canRead;
}
};
⽤法:
ReadStatus readStatus; //RAII FTW
if ( ! readStatus.OKToRead())
return;
这是⼀个程序ofc,其他将有类似的类.
想法是:
1.检查其他程序是否创建了他的“我是所有者⽂件”,如果它已经中断,则转到
2.
2.创建我的“我是所有者”⽂件,再次检查其他程序是否创建了⾃⼰的⽂件,如果它已删除我的⽂件并且中断则返回
3.
3.做我的阅读,然后删除我的“我是所有者⽂件”.
请注意,当它们都不读或写时很少出现,但问题是我仍然看到竞争条件的可能性很⼩,因为理论上其他程序可以检查我的锁⽂件的存在,看到没有⼀个,然后我创建了我的,其他程序创建了⾃⼰的程序,但在FS创建他的⽂件之前我再次检查,它不存在,然后发⽣灾难.这就是为什么我添加了⼀秒延迟,但作为CS书呆⼦,我发现让代码运⾏起来令⼈不安.
Ofc我不希望这⾥的任何⼈给我写⼀个解决⽅案,但如果有⼈知道我可以使⽤的可靠代码的链接,我会很⾼兴.
附:它必须是⽂件,因为我不是在编写整个项⽬,⽽是它是如何安排完成的.
P.P.S.:访问数据⽂件不是读者,作家,读者,作家….它可以是读者,读者,作家,作家,作家,读者,作家….
P.P.S:其他过程不是⽤C :(写的,所以提升是不可能的.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论