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

其实POSIX_THREAD_PROCESS_SHARED支持就可以直接利用pthread_mutex_t进行进程间上锁

#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;
}
转载请注明来源:Leoncom-《利用pthread_mutex对多进程上锁》
Trackback

only 1 comment untill now

  1. 有些实现没有这个pthread_process_share

Add your comment now