tp并发操作

1、文件锁
  flock()是一个用于对文件进行轻量级、跨平台的协同锁定(Advisory Locking)的函数。主要用于防止多个进程同时对一个文件进行读写操作,从而避免竞争和文件损坏。
  (1)、LOCK_SH(共享锁):用于读取操作,允许多个进程同时持有共享锁进行读取,但会阻塞其他进程获取独占锁。
  (2)、LOCK_EX(独占锁):用于写入操作,确保同一时间只有一个进程可以写入文件,其它进程无论读写都会被阻塞。
  (3)、LOCK_UN(释放锁):手动释放当前持有的共享锁或独占锁。
  (4)、LOCK_NB(非阻塞模式):这是一个掩码,可以加在上述锁之上(如LOCK_EX | LOCK_NB)。加上后,如果无法立即获取锁,函数会直接返回FALSE而不是阻塞等待。
  注:在使用flock()时,要特别注意
    (1)、必须手动释放锁:自PHP5.32起,flose()不再自动释放文件锁,必须显式调用flock($fp,LOCK_UN)
      (2)、协同锁的限制:flock() 是协同锁,这意味着只有所有访问该文件的程序都使用 flock() 时,锁才会生效。如果其他程序(如系统命令 cat、echo)绕过 flock() 直接写入文件,锁将无法阻止它们。
      (3)、进程级而非线程级:文件锁是进程级别的。在某些多线程服务器 API(如 ISAPI)下,同一服务器实例的不同线程可能无法被 flock() 正确隔离。
      (4)、文件系统限制:flock() 不支持某些过时的文件系统(如 FAT 及其衍生系统),也不支持 NFS 等网络文件系统,在这些环境下会始终返回 FALSE。
    (5)、截断文件时的特殊处理:如果你打算以写入模式("w" 或 "w+")打开文件并截断它,建议在加锁前先打开文件,或者使用一个专门的锁文件(Lock File)来控制访问,防止在获取锁之前文件内容已被清空。

2、数据库悲观锁


3、Redis分布式锁


4、消息队列异步处理(秒杀防超卖)

posted @ 2026-08-31 17:15  bwteacher  阅读(8)  评论(0)    收藏  举报