php实现读取内存顺序号_PHP教程

php中文网
发布: 2016-07-13 09:59:12
原创
1411人浏览过

php实现读取内存顺序号

 这篇文章主要介绍了php实现读取内存顺序号,十分的简单实用,需要的朋友可以参考下

 

 

只是做记录,osc本站应该有重复的

semWrapper.class.php

?

立即学习PHP免费学习笔记(深入)”;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

/*

* 信号量(Semaphore)。

* 这是一个包装类,用于解决不同平台下对“信号量”的不同实现方式。

* 目前这个类只是象征性的,在 Windows 平台下实际是空跑(并没有真的实现互斥)。

*/

class SemWrapper

{

private $hasSemSupport;

private $sem;

const SEM_KEY = 1;

 

public function __construct()

{

$this->hasSemSupport = function_exists( 'sem_get' );

if ( $this->hasSemSupport ) {

$this->sem = sem_get( self::SEM_KEY );

}

}

 

public function acquire() {

if ( $this->hasSemSupport ) {

return sem_acquire( $this->sem );

}

return true;

}

 

public function release() {

if ( $this->hasSemSupport ) {

return sem_release( $this->sem );

}

return true;

}

}

SeqGenerator.class.php

?

立即学习PHP免费学习笔记(深入)”;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

存了个图
存了个图

视频图片解析/字幕/剪辑,视频高清保存/图片源图提取

存了个图 17
查看详情 存了个图

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

/*

* 顺序号发生器。

*/

class SeqGenerator

{

const SHM_KEY = 1;

 

/**

* 对顺序号发生器进行初始化。

* 仅在服务器启动后的第一次调用有效,此后再调用此方法没有实际作用。

* @param int $start 产生顺序号的起始值。

* @return boolean 返回 true 表示成功。

*/

static public function init( $start = 1 )

{

// 通过信号量实现互斥,避免对共享内存的访问冲突

$sw = new SemWrapper;

if ( ! $sw->acquire() ) {

return false;

}

 

// 打开共享内存

$shm_id = shmop_open( self::SHM_KEY, 'n', 0644, 4 );

if ( empty($shm_id) ) {

// 因使用了 'n' 模式,如果无法打开共享内存,可以认为该共享内存已经创建,无需再次初始化

$sw->release();

return true;

}

 

// 在共享内存中写入初始值

$size = shmop_write( $shm_id, pack( 'L', $start ), 0 );

if ( $size != 4 ) {

shmop_close( $shm_id );

$sw->release();

return false;

}

 

// 关闭共享内存,释放信号量

shmop_close( $shm_id );

$sw->release();

return true;

}

 

/**

* 产生下一个顺序号。

* @return int 产生的顺序号

*/

static public function next()

{

// 通过信号量实现互斥,避免对共享内存的访问冲突

$sw = new SemWrapper;

if ( ! $sw->acquire() ) {

return 0;

}

 

// 打开共享内存

$shm_id = shmop_open( self::SHM_KEY, 'w', 0, 0 );

if ( empty($shm_id) ) {

$sw->release();

return 0;

}

 

// 从共享内存中读出顺序号

$data = shmop_read( $shm_id, 0, 4 );

if ( empty($data) ) {

$sw->release();

return 0;

}

 

$arr = unpack( 'L', $data );

$seq = $arr[1];

 

// 把下一个顺序号写入共享内存

$size = shmop_write( $shm_id, pack( 'L', $seq + 1 ), 0 );

if ( $size != 4 ) {

$sw->release();

return 0;

}

 

// 关闭共享内存,释放信号量

shmop_close( $shm_id );

$sw->release();

return $seq;

}

}

page.php

?

立即学习PHP免费学习笔记(深入)”;

1

2

3

4

5

//使用方法

 

$seq = SeqGenerator::next();

 

var_dump($seq);

以上所述就是本文的全部内容了,希望大家能够喜欢。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/976530.htmlTechArticlephp实现读取内存顺序号 这篇文章主要介绍了php实现读取内存顺序号,十分的简单实用,需要的朋友可以参考下 只是做记录,osc本站应该有重...
相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号