• 技术文章 >后端开发 >php教程

    在php中使用Se地图hore的进程锁

    2016-06-13 12:51:45原创388
    在php中使用Semaphore的进程锁

    在大多数的php开发中很少使用到锁机制,但是有些情况确实需要锁来处理,比如:缓存数据,如果数据丢失就会导致突发很多后端数据请求,可能后端就会挂掉,这时锁机制就有用出了,这里主要介绍基于Semaphore的内存锁,由于WIndows下没有扩展实现,需要在linux下测试。


    在命令行执行此文件,需要在两个独立的shell环境下执行,要不看不到效果,最终第二个执行会等待第一个执行结束才开始执行,

    0);
    
    if (sem_acquire($id)) {
        $shmid = shm_attach($key);
        if (shm_has_var($shmid, $k)) {
            $i = shm_get_var($shmid, $k);
            $i['k']++;
            shm_put_var($shmid, $k, $i);
        }
        else { 
            shm_put_var($shmid, $k, $i);
        }
            
        sem_release($id);
    }

    这段代码实现的是给共享内存加锁,然后在给锁定内存中写入变量值,写入变量需要是支持序列化的类型


    这里有两个问题:

    1、sem_get 返回的是semaphore id, 是给sem_acquire使用的

    2、shm_attach返回的是共享内存id,是给shm_*系列的函数使用的

    从测试结果看,这里使用shell测试,执行多次查看结果

    for i in `seq 1 1000`; do php test-sysvsem.php ;done

    
    

    经过测试没有结果正确

    最后还说到,平时使用fastcgi + php的设置,很少用到多线程版本的php,不知道多线程和多进程在php中有那些差别,如果谁知道希望告知下

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:shmid php shm sem key
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• zend debugger 如何安装• linux centos5.5 不知什么原因装配不了gcc• 活动帖问的有关问题徐老师不回答,再开一帖吧• 果决交清学费参加广州传智PHP班为创业作准备• PHP怎么调用java代码
    1/1

    PHP中文网