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

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

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

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);
}

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

目录
相关文章
|
6月前
|
调度
进程与线程的区别与联系
进程与线程的区别与联系
|
7月前
|
调度
进程和线程的区别和联系
进程和线程的区别和联系
62 0
|
7月前
|
调度
线程和进程的区别?
线程和进程的区别?
|
Java 调度
【多线程】线程与进程的区别与联系
【多线程】线程与进程的区别与联系
|
Java 编译器 Go
线程和进程 / 进程和线程的区别和联系
每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之一.
178 0
线程和进程 / 进程和线程的区别和联系
使用共享内存作为进程互斥锁的代码
使用共享内存作为进程互斥锁的代码
115 0
个人理解进程和线程的主要区别
个人理解进程和线程的主要区别
|
定位技术
线程和进程的区别是什么?
线程和进程的区别是什么?
|
API C# Windows
C#多线程(4):进程同步Mutex类
C#多线程(4):进程同步Mutex类
263 0
C#多线程(4):进程同步Mutex类
|
资源调度 并行计算 调度
进程与线程有什么区别
进程与线程有什么区别
117 0

相关实验场景

更多