gpt4 book ai didi

php - 两个文件和两个 AJAX 调用的并发

转载 作者:行者123 更新时间:2023-12-04 04:43:37 27 4
gpt4 key购买 nike

当使用两个不同的 AJAX 函数访问两个不同的文件时,我遇到了并发问题。

我不能使用数据库来完成以下任务,它只能使用这些文件来完成

问题

我有两个文件,一个 :

// A content :
1 2 3 4
// B content :
5 6 7 8

我有两个 AJAX 调用, func_afunc_b func_a添加来自 的最后一个值一个 并添加来自 的最后一个值乙 一个
// Result after func_a 
A : 1 2 3 4 8
B : 5 6 7 8 4
func_b添加来自 的最后一个值乙 一个 并添加来自 的最后一个值一个

我考虑了并发性,无论如何都会出现问题。首先,如果我在打开下一个文件之前阅读并关闭每个文件,以及 func_a + func_b同时使用,我可以得到以下结果:
A : 1 2 3 4 8 8
B : 5 6 7 8 4 4

但想要的结果是:
A : 1 2 3 4 8 4
B : 5 6 7 8 4 8

而且,我想我不能在整个过程中保持文件打开,否则我可能会陷入僵局。
func_a open A;
func_b open B;
func_a can't open B, waits forever;
func_b can't open A, waits forever;

我很确定 PhP Mutex 不是我要找的,因为它不能在两个 AJAX 调用之间工作。另外,假设返回“对不起,无法打开文件 B”不是一个选项,它必须在第一次尝试时起作用。

到目前为止我想到的每个解决方案都行不通:

使用 mutex.lock临时文件来检查资源是否被使用会导致相同的问题。

也许有一种方法可以检查 Apache 当前是否正在运行 func_a所以 func_b等待? (在这种情况下资源匮乏是不可能的)

我不太习惯并发数学,我在 Internet 上找到的所有内容都与数据库和/或互斥锁有关。

非常感谢任何帮助,也许有一种我没有想到的简单方法?

谢谢。

最佳答案

您可以使用 flock()这将锁定文件,以便其他进程不会写入文件。

$fp = fopen("file.txt", "r+");

while(!flock($fp, LOCK_EX)) { // acquire an exclusive lock
// waiting to lock the file
}

// your code here

flock($fp, LOCK_UN); // release the lock

fclose($fp);

关于php - 两个文件和两个 AJAX 调用的并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18536268/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com