【发布时间】:2018-10-03 07:47:10
【问题描述】:
所以,我正在尝试使用多进程(fork)来处理并发。
我首先在本地文件夹中运行了代码,并且代码运行良好。但是,当我尝试将文件设置到 UNIX 中的 tmp 文件夹时,我的代码不会被信号量阻塞。在我看来,当从 tmp 文件夹打开文件时,每个进程都将完成所有工作,而不是拆分工作,或者在极少数情况下,1 个进程将完成所有工作,而另外两个进程以某种方式永远无法访问锁。
让我发疯,如果它适用于本地文件,那么它没有理由在 tmp 文件夹中失败。
基本目标是我有一组来自fork() 的子进程,只有一个进程控制打开文件、从文件读取值、存储值、关闭文件、修改值、打开文件、写入的 CS值文件,关闭文件,然后结束 CS。我正在使用POSIX semaphore。
tmp/file.txt 是否有任何理由与sem_wait()/sem_post() 存在问题。任何指针都会有所帮助。
这两个代码唯一不同的是:
fd = open("Seq.txt", O_RDONLY);
对比
fd = open("tmp/Seq.txt", O_RDONLY);
我需要发布更大的代码 sn-p 吗?
【问题讨论】:
-
可能 open 找不到
tmp/Seq.txt文件。是否需要在路径中添加/?像这样fd = open("/tmp/Seq.txt", O_RDONLY);。请提供minimal reproducible example。 -
上帝...当吉特。那个工作。知道这很简单。谢谢。奇怪的是,我认为错误检查会发现这一点。
-
@Leruce open() 调用失败时没有返回负值?
-
不,跳过它并进入 fd != -1 接下来并写了。
标签: c unix concurrency posix semaphore