首页 > 开发 > C++ > 正文

Linux下怎么实现这样的锁?

2017-09-11 21:34:57  来源: 网友分享

语言是c/c++

需求是这样的,有一段共享内存大家都可以读,只有一个进程可以写,然后大家读都没有问题,但是写的时候必须所有人都不在读的时候才可以写。

两组lock操作,第一组把一个ref+-1,然后允许读取。
第二组lock的时候先等待ref=0,这时候所有第一种lock会被堵塞,然后等ref=0开始读写这部分内存,unlock之后放行第一种lock。

这种锁如何实现,或者说叫什么名字?

我自己想的办法是另开一个进程,然后和这些进程建立一个socket,然后其他进程向这个进程请求资源,请求之后开始read,当资源空闲的时候就直接write,否则就加入一个cleanup队列,直到写入操作介绍之后再一起write,但是我感觉这样太浪费资源来的。。

解决方案

这不就是读写锁么?
参见pthread_rwlock_init(3),需要定义__USE_UNIX98或__USE_XOPEN2K
或者 http://en.cppreference.com/w/cpp/thread/shared_lock

另外,你用mutex和condition_variable自己实现一个也不麻烦