线程互斥好办,来个锁就可以了。那么进程怎么办?使用共享内存。代码如下:
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);
}
进程方面的调用,这里就不讨论了。