国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

php實現(xiàn)讀取內(nèi)存順序號

2024-05-04 23:33:32
字體:
供稿:網(wǎng)友

這篇文章主要介紹了php實現(xiàn)讀取內(nèi)存順序號,十分的簡單實用,需要的朋友可以參考下

只是做記錄,osc本站應該有重復的

semWrapper.class.php

 

 
  1. /* 
  2. * 信號量(Semaphore)。 
  3. * 這是一個包裝類,用于解決不同平臺下對“信號量”的不同實現(xiàn)方式。 
  4. * 目前這個類只是象征性的,在 Windows 平臺下實際是空跑(并沒有真的實現(xiàn)互斥)。 
  5. */ 
  6. class SemWrapper 
  7. private $hasSemSupport
  8. private $sem
  9. const SEM_KEY = 1; 
  10.  
  11. public function __construct() 
  12. $this->hasSemSupport = function_exists( 'sem_get' ); 
  13. if ( $this->hasSemSupport ) { 
  14. $this->sem = sem_get( self::SEM_KEY ); 
  15.  
  16. public function acquire() { 
  17. if ( $this->hasSemSupport ) { 
  18. return sem_acquire( $this->sem ); 
  19. return true; 
  20.  
  21. public function release() { 
  22. if ( $this->hasSemSupport ) { 
  23. return sem_release( $this->sem ); 
  24. return true; 

SeqGenerator.class.php

 

 
  1. /* 
  2. * 順序號發(fā)生器。 
  3. */ 
  4. class SeqGenerator 
  5. const SHM_KEY = 1; 
  6.  
  7. /** 
  8. * 對順序號發(fā)生器進行初始化。 
  9. * 僅在服務器啟動后的第一次調(diào)用有效,此后再調(diào)用此方法沒有實際作用。 
  10. * @param int $start 產(chǎn)生順序號的起始值。 
  11. * @return boolean 返回 true 表示成功。 
  12. */ 
  13. static public function init( $start = 1 ) 
  14. // 通過信號量實現(xiàn)互斥,避免對共享內(nèi)存的訪問沖突 
  15. $sw = new SemWrapper; 
  16. if ( ! $sw->acquire() ) { 
  17. return false; 
  18.  
  19. // 打開共享內(nèi)存 
  20. $shm_id = shmop_open( self::SHM_KEY, 'n', 0644, 4 ); 
  21. if ( emptyempty($shm_id) ) { 
  22. // 因使用了 'n' 模式,如果無法打開共享內(nèi)存,可以認為該共享內(nèi)存已經(jīng)創(chuàng)建,無需再次初始化 
  23. $sw->release(); 
  24. return true; 
  25.  
  26. // 在共享內(nèi)存中寫入初始值 
  27. $size = shmop_write( $shm_id, pack( 'L'$start ), 0 ); 
  28. if ( $size != 4 ) { 
  29. shmop_close( $shm_id ); 
  30. $sw->release(); 
  31. return false; 
  32.  
  33. // 關(guān)閉共享內(nèi)存,釋放信號量 
  34. shmop_close( $shm_id ); 
  35. $sw->release(); 
  36. return true; 
  37.  
  38. /** 
  39. * 產(chǎn)生下一個順序號。 
  40. * @return int 產(chǎn)生的順序號 
  41. */ 
  42. static public function next() 
  43. // 通過信號量實現(xiàn)互斥,避免對共享內(nèi)存的訪問沖突 
  44. $sw = new SemWrapper; 
  45. if ( ! $sw->acquire() ) { 
  46. return 0; 
  47.  
  48. // 打開共享內(nèi)存 
  49. $shm_id = shmop_open( self::SHM_KEY, 'w', 0, 0 ); 
  50. if ( emptyempty($shm_id) ) { 
  51. $sw->release(); 
  52. return 0; 
  53.  
  54. // 從共享內(nèi)存中讀出順序號 
  55. $data = shmop_read( $shm_id, 0, 4 ); 
  56. if ( emptyempty($data) ) { 
  57. $sw->release(); 
  58. return 0; 
  59.  
  60. $arr = unpack( 'L'$data ); 
  61. $seq = $arr[1]; 
  62.  
  63. // 把下一個順序號寫入共享內(nèi)存 
  64. $size = shmop_write( $shm_id, pack( 'L'$seq + 1 ), 0 ); 
  65. if ( $size != 4 ) { 
  66. $sw->release(); 
  67. return 0; 
  68.  
  69. // 關(guān)閉共享內(nèi)存,釋放信號量 
  70. shmop_close( $shm_id ); 
  71. $sw->release(); 
  72. return $seq

page.php

 

 
  1. //使用方法 
  2.  
  3. $seq = SeqGenerator::next(); 
  4.  
  5. var_dump($seq); 

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 平阴县| 济阳县| 治县。| 拉孜县| 休宁县| 顺义区| 恩施市| 时尚| 临泽县| 绥中县| 博乐市| 仁寿县| 玛纳斯县| 渝北区| 墨玉县| 康保县| 台北县| 通州市| 九江县| 四平市| 崇义县| 合肥市| 定襄县| 乳源| 开封市| 双江| 百色市| 永康市| 独山县| 和静县| 凌源市| 洪泽县| 苏尼特左旗| 天峻县| 航空| 若尔盖县| 长海县| 那坡县| 吴堡县| 霍林郭勒市| 靖州|