iT邦幫忙

0

php semaphore sem_get 設定問題

想請問sem_get裡的$autoRelease 和 sem_release() 釋放的是一樣的東西嗎?
因為小弟測試

  1. $autoRelease = 1 , 將 sem_release($semaphore)拿掉,好像也不會自動釋放
  2. $autoRelease = 0 , 將 sem_release($semaphore)拿掉,結果和1一樣
    問題:
  3. $autoRelease = 1 或 $autoRelease = 0 實際的差異在哪裡?
  4. sem_remove() 和 sem_release() 的差異在哪裡(使用時機)
    第一次接觸semaphore 想請各路高手解惑,謝謝
//Semaphore properties
$key = 123456;
$max = 1;
$permissions = 0666;
$autoRelease = 1;
 
//Open a new or get an existing semaphore
$semaphore = sem_get($key, $max, $permissions, $autoRelease);
if(!$semaphore) {
     echo "Failed on sem_get().\n";
     exit;
}
 
//Try to aquire the semaphore.
for($i = 0; $i < 2; $i++) {
     echo "\nAttempting to acquire semaphore...\n";
     sem_acquire($semaphore);
 
     echo "Aquired.\n";
     echo "Enter some text: ";
     $handler = fopen("php://stdin", "r");
     $text = fgets($handler);
 
     fclose($handler);
     sem_release($semaphore);
 
     echo "Got: $text \n";
}

1 個回答

0
fillano
iT邦超人 1 級 ‧ 2020-12-22 14:18:53
最佳解答

請看文件:
https://www.php.net/manual/en/function.sem-get.php

autoRelease是在REQUEST結束時自動釋放,並不是說在你程式內某個地方會釋放。

建議你仔細看一下操作semaphore的四個函數:
https://www.php.net/manual/en/book.sem.php

豬豬人 iT邦新手 5 級 ‧ 2020-12-22 14:46:51 檢舉

感激不盡

我要發表回答

立即登入回答