>  기사  >  백엔드 개발  >  PHP 파일 잠금 동시성 작업에 대한 자세한 설명

PHP 파일 잠금 동시성 작업에 대한 자세한 설명

小云云
小云云원래의
2018-03-31 10:51:202366검색

이 기사에서는 주로 PHP 파일 잠금 동시 작업에 대한 자세한 설명을 공유합니다. 기본값: PHP의 파일 작업 기능은 차단 상태가 아니지만 모든 사람에게 도움이 되기를 바랍니다.

조건:

  • 스크립트 작업이 필요하고 다른 스크립트 작업을 차단해야 하는 경우 파일 잠금을 사용해야 합니다.

잠금 작업 과정:

  • 먼저 잠금을 추가하고, 잠금이 성공적으로 추가되었는지 확인하고, 성공하면 다시 사용하세요!

잠금 유형:

  • 읽기 잠금: s-Lock(공유 잠금) 공유 잠금, 읽기 작업 전에 잠금이 증가할 것으로 예상됩니다. 결과적으로 동시 읽기가 허용되고 추가 쓰기 작업이 차단됩니다.

  • 쓰기 잠금: x-lock(배타적 잠금) 배타적 잠금, 배타적 잠금, 쓰기 작업 전에 잠금 유형을 추가해 보세요. 결과적으로 다른 스크립트는 읽거나 쓸 수 없습니다.

  • 의도 잠금: 리소스를 작동하는 모든 스크립트는 파일 잠금을 사용하는 규칙(규칙)을 따릅니다.

Blocking: 이전 작업이 잠금 해제된 후 다음 파일 잠금 작업이 계속 실행될 수 있음을 의미합니다.

기능:

bool flock ( resource $handle , int $operation [, int &$wouldblock ] )

유형 매개변수($Operation): LOCK_SH 읽기 잠금 및 LOCK_EX 쓰기 잠금$operation):LOCK_SH   读锁  和 LOCK_EX 写锁

例:
使用读锁:
PHP 파일 잠금 동시성 작업에 대한 자세한 설명
使用写锁:
PHP 파일 잠금 동시성 작업에 대한 자세한 설명

可以通过LOCK_NB来在锁定失败时,不阻塞:

<?php
$fp = fopen(&#39;/tmp/lock.txt&#39;, &#39;r+&#39;);

/* Activate the LOCK_NB option on an LOCK_EX operation */if(!flock($fp, LOCK_EX | LOCK_NB)) {
    echo &#39;Unable to obtain lock&#39;;
    exit(-1);
}

/* ... */

fclose($fp);

解锁:在 PHP 5.3.2版本之前,锁也会被 fclose() 释放(在脚本结束后会自动调用),现在只能通过flock($fp,LOCK_UN) 手动解锁

默认的:PHP的文件操作函数,不是阻塞状态,而是自由操作状态。

条件:

  • 当需要一个脚本操作而需要阻塞另外的脚本操作时,需要用到文件锁。

锁操作流程:

  • 先加锁,检测锁是否加成功,如果成功再使用!

锁定类型:

  • 读锁:  s-Lock(share-lock)共享锁,读操作前,期望增加的锁定。导致,允许并发读,阻塞额外的写操作。

  • 写锁:  x-lock(exclusive-lock)排他锁,独占锁,写操作前,尝试添加的锁定类型。导致,其他脚本不能读也不能写。

  • 意向锁:所有的操作资源的脚本都遵循一个约定来使用文件锁(约定)。

阻塞:指的是上一个操作执行完解锁之后,下一个对文件锁定的操作才能继续执行

函数:

bool flock ( resource $handle , int $operation [, int &$wouldblock ] )

类型参数($operation):LOCK_SH   读锁  和 LOCK_EX 写锁

例:
使用读锁:
PHP 파일 잠금 동시성 작업에 대한 자세한 설명
使用写锁:
PHP 파일 잠금 동시성 작업에 대한 자세한 설명

可以通过LOCK_NB来在锁定失败时,不阻塞:

<?php
$fp = fopen(&#39;/tmp/lock.txt&#39;, &#39;r+&#39;);

/* Activate the LOCK_NB option on an LOCK_EX operation */if(!flock($fp, LOCK_EX | LOCK_NB)) {
    echo &#39;Unable to obtain lock&#39;;
    exit(-1);
}

/* ... */

fclose($fp);

解锁:在 PHP 5.3.2版本之前,锁也会被 fclose() 释放(在脚本结束后会自动调用),现在只能通过flock($fp,LOCK_UN)

예:
읽기 잠금 사용:
여기에 그림 설명 쓰기
쓰기 잠금 사용:
여기에 그림 설명 쓰기

잠금 실패 시 LOCK_NB를 사용할 수 있습니다. Non -차단:

rrreee잠금 해제: PHP 5.3.2 이전에는 fclose()를 통해서도 잠금이 해제되었습니다(스크립트가 끝난 후 자동으로 호출됨). 이제는 flock($fp)을 통해서만 해제할 수 있습니다. ,LOCK_UN) 수동 잠금 해제

기본값: PHP의 파일 작업 기능은 차단 상태가 아니라 자유 작업 상태입니다.

조건:

스크립트 작업이 필요하고 다른 스크립트 작업을 차단해야 하는 경우 파일 잠금을 사용해야 합니다. 🎜🎜🎜🎜잠금 작업 과정: 🎜🎜🎜🎜먼저 잠금을 추가하고, 잠금이 성공적으로 추가되었는지 확인하고, 성공하면 다시 사용하세요! 🎜🎜🎜🎜잠금 유형: 🎜🎜🎜🎜읽기 잠금: s-Lock(공유 잠금) 공유 잠금, 읽기 작업 전에 잠금이 증가할 것으로 예상됩니다. 결과적으로 동시 읽기가 허용되고 추가 쓰기 작업이 차단됩니다. 🎜🎜🎜🎜쓰기 잠금: x-lock(배타적 잠금) 배타적 잠금, 배타적 잠금, 쓰기 작업 전에 잠금 유형을 추가해 보세요. 결과적으로 다른 스크립트는 읽거나 쓸 수 없습니다. 🎜🎜🎜🎜의도 잠금: 리소스를 작동하는 모든 스크립트는 파일 잠금을 사용하는 규칙(규칙)을 따릅니다. 🎜🎜🎜🎜🎜Blocking: 이전 작업이 잠금 해제된 후 다음 파일 잠금 작업이 계속 실행될 수 있음을 의미합니다.🎜🎜🎜기능: 🎜rrreee🎜유형 매개변수($Operation): LOCK_SH 읽기 잠금 및 LOCK_EX 쓰기 잠금🎜🎜예:
읽기 잠금 사용:
여기에 그림 설명 쓰기
쓰기 잠금 사용:
여기에 그림 설명 쓰기🎜🎜잠금 실패 시 LOCK_NB를 사용할 수 있습니다. Non -차단: 🎜rrreee🎜잠금 해제: PHP 5.3.2 이전에는 fclose()를 통해서도 잠금이 해제되었습니다(스크립트가 끝난 후 자동으로 호출됨). 이제는 flock($fp)을 통해서만 해제할 수 있습니다. ,LOCK_UN) 수동 잠금 해제. 🎜🎜관련 권장 사항: 🎜🎜🎜PHP는 높은 동시성 문제를 해결하기 위해 파일 잠금을 어떻게 사용합니까?

위 내용은 PHP 파일 잠금 동시성 작업에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.