라이브러리

[PHP] SyncMutex::lock - 배타적 잠금을 기다립니다.




SyncMutex::lock


PHP의 SyncMutex::lock은 동기화된 락을 사용하여 프로세스 간의 동시 접근을 제어하는 데 사용되는 함수입니다.

# 동기화된 락이란?


동기화된 락은 여러 프로세스 또는 스레드가 공유 자원을 접근하는 것을 방지하는 데 사용되는 메커니즘입니다. 한 프로세스 또는 스레드가 락을 획득하면 다른 프로세스 또는 스레드는 락을 획득할 수 없으며, 락을 방출할 때까지 대기합니다.

# SyncMutex::lock 사용 예제


#hostingforum.kr
php

<?php



// SyncMutex 객체를 생성합니다.

$mutex = new SyncMutex();



// 락을 획득합니다.

$mutex->lock();



try {

    // 락이 획득된 상태에서 코드를 실행합니다.

    echo "락이 획득되었습니다.
";



    // 다른 프로세스 또는 스레드가 락을 획득하도록 대기합니다.

    sleep(5);



} finally {

    // 락을 방출합니다.

    $mutex->unlock();

}



?>



# 동시 접근을 제어하는 예제


#hostingforum.kr
php

<?php



// SyncMutex 객체를 생성합니다.

$mutex = new SyncMutex();



// 락을 획득합니다.

$mutex->lock();



try {

    // 락이 획득된 상태에서 코드를 실행합니다.

    echo "락이 획득되었습니다.
";



    // 다른 프로세스 또는 스레드가 락을 획득하도록 대기합니다.

    sleep(5);



    // 락이 획득된 상태에서 코드를 실행합니다.

    echo "락이 획득되었습니다.
";



} finally {

    // 락을 방출합니다.

    $mutex->unlock();

}



?>



# 동시 접근을 제어하는 예제 (다중 프로세스)


#hostingforum.kr
php

<?php



// SyncMutex 객체를 생성합니다.

$mutex = new SyncMutex();



// 락을 획득합니다.

$mutex->lock();



try {

    // 락이 획득된 상태에서 코드를 실행합니다.

    echo "락이 획득되었습니다.
";



    // 다른 프로세스 또는 스레드가 락을 획득하도록 대기합니다.

    sleep(5);



    // 락이 획득된 상태에서 코드를 실행합니다.

    echo "락이 획득되었습니다.
";



} finally {

    // 락을 방출합니다.

    $mutex->unlock();

}



// 다른 프로세스에서 코드를 실행합니다.

$mutex2 = new SyncMutex();

$mutex2->lock();

echo "다른 프로세스에서 락이 획득되었습니다.
";

$mutex2->unlock();



?>



# 동시 접근을 제어하는 예제 (다중 스레드)


#hostingforum.kr
php

<?php



class MyThread extends Thread {

    private $mutex;



    public function __construct(SyncMutex $mutex) {

        $this->mutex = $mutex;

    }



    public function run() {

        // 락을 획득합니다.

        $this->mutex->lock();



        try {

            // 락이 획득된 상태에서 코드를 실행합니다.

            echo "락이 획득되었습니다.
";



            // 다른 스레드가 락을 획득하도록 대기합니다.

            sleep(5);



            // 락이 획득된 상태에서 코드를 실행합니다.

            echo "락이 획득되었습니다.
";



        } finally {

            // 락을 방출합니다.

            $this->mutex->unlock();

        }

    }

}



// SyncMutex 객체를 생성합니다.

$mutex = new SyncMutex();



// 스레드를 생성합니다.

$thread = new MyThread($mutex);

$thread->start();



// 다른 스레드에서 코드를 실행합니다.

$thread2 = new MyThread($mutex);

$thread2->start();



?>



SyncMutex::lock 사용 시 주의점


- 락을 획득한 프로세스 또는 스레드는 락을 방출할 때까지 대기합니다. 따라서 락을 획득한 프로세스 또는 스레드는 다른 프로세스 또는 스레드가 락을 획득할 수 없게 됩니다.
- 락을 획득한 프로세스 또는 스레드는 락을 방출할 때까지 코드를 실행할 수 없습니다. 따라서 락을 획득한 프로세스 또는 스레드는 다른 프로세스 또는 스레드가 락을 획득할 수 없게 됩니다.
- 락을 획득한 프로세스 또는 스레드는 다른 프로세스 또는 스레드가 락을 획득하도록 대기합니다. 따라서 락을 획득한 프로세스 또는 스레드는 다른 프로세스 또는 스레드가 락을 획득할 수 없게 됩니다.

SyncMutex::lock 사용 시 장점


- 동시 접근을 제어할 수 있습니다.
- 락을 획득한 프로세스 또는 스레드는 다른 프로세스 또는 스레드가 락을 획득할 수 없게 됩니다.
- 락을 획득한 프로세스 또는 스레드는 락을 방출할 때까지 대기합니다.

SyncMutex::lock 사용 시 단점


- 락을 획득한 프로세스 또는 스레드는 다른 프로세스 또는 스레드가 락을 획득할 수 없게 됩니다.
- 락을 획득한 프로세스 또는 스레드는 락을 방출할 때까지 대기합니다.
- 락을 획득한 프로세스 또는 스레드는 다른 프로세스 또는 스레드가 락을 획득하도록 대기합니다.
  • profile_image
    나우호스팅 @pcs8404 

    호스팅포럼 화이팅!

    댓글목록

    등록된 댓글이 없습니다.

  • 전체 8,985건 / 90 페이지

검색

게시물 검색