zoukankan      html  css  js  c++  java
  • 利用pthread_mutex对多进程上锁

     

    Posted on 2009-05-24 by

    大三时候的系统结构实验,为了实现多进程的同步,由于变量都是进程的单独拷贝,所以超级傻的用了一个文件做标志,不同的进程对同一文件进行读写不同的数做锁。

    其实POSIX_THREAD_PROCESS_SHARED支持就可以直接利用pthread_mutex_t进行进程间上锁
    [code=c]
    #include "unpheader.h"
    #include <pthread.h>
    #include <sys/mman.h>

    static pthread_mutex_t *mptr;

    void my_lock_init(void)               //锁初始化,PTHREAD_PROCESS_SHARED属性
    {
    int    fd;
    pthread_mutexattr_t    mattr;

    fd=open("/dev/zero",O_RDWR,0);
    mptr = mmap(0,sizeof(pthread_mutex_t),PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);

    close(fd);

    pthread_mutexattr_init(&mattr);
    pthread_mutexattr_setpshared(&mattr,PTHREAD_PROCESS_SHARED);
    pthread_mutex_init(mptr,&mattr);
    }

    int main(void)
    {
    pid_t pid;
    my_lock_init();
    if((pid = fork()) == 0)            //child process
    {
    int i=0;
    for(i=0;i<10;i++)
    {
    pthread_mutex_lock(mptr);
    printf("child get mutex!\n");
    sleep(1);
    pthread_mutex_unlock(mptr);
    sleep(1);
    }
    }
    else                                    //father process
    {
    int i=0;
    for(i=0;i<10;i++)
    {
    pthread_mutex_lock(mptr);
    printf("father get mutex!\n");
    sleep(1);
    pthread_mutex_unlock(mptr);
    sleep(1);
    }
    }
    return 0;
    }
    [/code]

  • 相关阅读:
    OpenGL------光照+染色
    sicily 1345 能量项链
    sicily 1193 Up the Stairs
    sicily 1172 Queens, Knights and Pawns
    sicily 1206 Stacking Cylinders
    模拟退火算法解tsp问题
    js对象的属性可以是一个变量
    vue中/deep/的使用
    MySQL中DATEDIFF函数使用
    js中的this
  • 原文地址:https://www.cnblogs.com/watchdatalearn2012620/p/3121723.html
Copyright © 2011-2022 走看看