线程锁用于进程之间


实现进程之间上锁有多种方式,可以用文件锁,但文件锁要涉及到文件系统,十分耗时。其实进程之间也可以用线程锁,因为线程锁不仅可以用于线程之间同样可以用于进程之间。
为了在多个进程之间使用线程锁,必须做到(1)互斥锁变量必须存储在为所有进程所共享的内存中;(2)必须通知线程函数库互斥锁是在不同进程之间共享的。
针对第一条,必须将互斥锁放到共享内存中,不同进程共享内存有多种方式,在此我们使用mmap函数和/dev/zero设备。例如以下函数:
static pthread_mutex_t *mptr;
void my_lock_init(char * pathname)
{
  int fd;
  pthread_muteattr_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_muteattr_setpshared(&mattr,PTHREAD_PROCESS_SHARED);
  pthread_mutex_init(mptr,&mattr);


}
首先打开/dev/zero,并调用mmap,映射的字节数为pthread_mutex_t类型大小。紧接着关闭文件,这里不会有问题,因为描述字已经内存影射了。
在共享内存里创建的互斥锁必须用pthread_mutexattr_init函数来动态初始化,然后赋予PTHREAD_PROCESS_SHARED属性,本属性的缺省值是PTHREAD_PROCESS_PRIVATE,只允许单个进程内使用。。最后使用pthread_mutex_init初始化互斥锁变量。支持进程间使用线程锁的初始工作全部完成,可以使用了,如下:
pthread_mutex_lock(mptr);
pthread_mutex_unlock(mptr);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值