Linux下怎么实现这样的锁?

发布于 2022-08-28 22:51:07 字数 370 浏览 11 评论 0

语言是c/c++

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

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我不在是我 2022-09-04 22:51:07

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

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

瀟灑尐姊 2022-09-04 22:51:07

楼主需要的是进程(process)之间共共享内存,那么这个时候pthread无法帮忙,因为pthread是线程(thread)级别的锁。 进程之间共享内存一般通过memory mapped file来进行,参见mmap函数。如果需要枷锁操作,可以根据情况选用文件锁 fcntl,或者信号量(Semaphores) semget函数来进行读写的限制。
如果楼主本意是线程的话,那么pthread_rwlock应该就够了。

时光匆匆的小流年 2022-09-04 22:51:07

一个读的信号量,一个写的信号量,读信号量初始化为0,写的信号量初始化为1。
读的时候先查看写是否为1,如果是,则将读信号量加1,完成后-1;若不是则表示现在不能读。写的时候先查看读的信号量是否为0,若为0,则将写的信号量-1;若不为0,就表示不能写,写完成后,写信号量加1.
记得以前学操作系统上面的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文