您当前的位置: 首页 > 

柳鲲鹏

暂无认证

  • 0浏览

    0关注

    4642博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

使用共享内存作为进程互斥锁的代码

柳鲲鹏 发布时间:2018-12-17 14:48:05 ,浏览量:0

   线程互斥好办,来个锁就可以了。那么进程怎么办?使用共享内存。代码如下:

pthread_mutex_t* init_shm_mutex(const key_t mutex_key)
{
    int shmid = shmget(mutex_key, sizeof(pthread_mutex_t), 0666 | IPC_CREAT);
    if (shmid == -1)
    {
        return NULL;
    }

    void* shm_addr = shmat(shmid, NULL, 0);
    if (shm_addr == (void *) -1)
    {
        return NULL;
    }
 
    pthread_mutexattr_t mutex_attr;
    pthread_mutexattr_init(      &mutex_attr);
    pthread_mutexattr_setpshared(&mutex_attr, PTHREAD_PROCESS_SHARED);
    pthread_mutexattr_setrobust( &mutex_attr, PTHREAD_MUTEX_ROBUST);

    pthread_mutex_t* shm_mutex = (pthread_mutex_t *)shm_addr;
    pthread_mutex_init(shm_mutex,&mutex_attr);

    return shm_mutex;
}  

  使用时:

#define PROCESS_MUTEX_KEY 20181217
//process
pthread_mutex_t* g_ProcessMutex = NULL
void write_data_to_shared_memory(const uchar* data)
{
    if (g_ProcessMutex == NULL)
    {
        g_ProcessMutex = init_shm_mutex(PROCESS_MUTEX_KEY);
    }

    pthread_mutex_lock(g_ProcessMutex);

    //do something

    pthread_mutex_unlock(g_ProcessMutex);
}

   进程方面的调用,这里就不讨论了。 

 

关注
打赏
1665724893
查看更多评论
立即登录/注册

微信扫码登录

0.0874s