mutex
MY CUP OF TEA
所谓的念念不忘,在自己眼中是爱,在对方眼中是烦,在旁人眼中是贱。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
git初始化本地代码,不保留自己修改的内容的命令
git reset --hard origin/master git pull原创 2021-01-12 15:08:02 · 454 阅读 · 1 评论 -
进程锁 读写文件的小例子 C++代码
代码#include <unistd.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#include <cassert>#include <pthread.h>#include <cstdio>#include <cstdlib>#include <fstream>#include <ios原创 2021-01-08 18:43:49 · 360 阅读 · 0 评论 -
将读写锁放到共享内存,实现进程之间对于同一文件的读写操作
思路将读写锁和读写锁的属性以及一个用于存储共享内存的地址的int型变量三者封装成一个struct结构 将这个结构体放到共享内存中,以及将读写锁的属性设置成全局性质,然后使用这个属性初始化锁,以及将锁的地址关联到结构体的内存地址这个变量 定义一个销毁函数,用于退出进程的时候,将内存空间销毁,以及删除对应的变量 定义读写函数,读函数读取文件的内容,输出文件的内容;写函数,以追加的方式,向指定文件中写入数据 测试:使用fork创建父子两个进程,定义一个for循环,循环5次之后,退出循环并且执行销毁函数原创 2021-01-06 15:40:50 · 2940 阅读 · 5 评论 -
将读写锁放到共享内存中,实现进程之间对数据的读写访问控制
代码#include <unistd.h>#include <sys/types.h>#include <sys/ipc.h>#include <sys/shm.h>#include <assert.h>#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <fstream>#include <原创 2021-01-06 14:43:21 · 638 阅读 · 0 评论 -
关于锁的注意事项
文件锁Linux 提供了fcntl系统调用,可以锁定文件 但是文件锁是和进程相关联的,一个进程中的多个线程/协程对同一个文件进行的锁操作会互相覆盖掉,从而无效。 fcntl创建的锁是建议性锁,只有写入的进程和读取的进程都遵循建议才有效;对应的有强制性锁,会在每次文件操作时进行判断,但性能较差,因此 Linux/Unix 系统默认采用的是建议性锁。写入日志文件使用O_APPEND标志来打开文件,这样在每次写入时都会lseek到文件末尾进行写入,这是一个原子操作,因此不会产生同步问...原创 2021-01-02 22:22:49 · 180 阅读 · 0 评论 -
linux fork多进程 demo
注释使用系统调用fork()创建三个子进程; 各个子进程显示和输出一些提示信息和自己的进程标识符; 父进程显示自己的进程ID和一些提示信息,然后调用waitpid()等待多个子进程结束,并在子进程结束后显示输出提示信息表示程序结束。代码#include <iostream>#include <unistd.h>#include <cstdarg>#include <wait.h>#include "crypto_util.h"int原创 2021-01-02 22:13:15 · 289 阅读 · 0 评论 -
完善博文 共享内存一写多读无锁实现的代码逻辑部分
使用共享内存(内存映射)实现发布订阅模式多进程实现PubSub发布订阅模式,从而实现进程间的通信。 通信方式可以是TCP/UDP,管道Pipe/消息队列,共享内存shared memory等等。其中TCP/UDP的方式是可以用作局域网以及跨平台的通信,Pipe/消息队列是进程间基于系统实现比较基础的通信,这两者有大量优秀的第三方库支持,如ZeroMQ,只要加入我们自定义数据的转换方式即可方便实现;而共享内存是实现进程间通信最快的方式,但因为共享内存的设计并不是用来做类似PubSub这种模式的实现的,并原创 2020-12-29 14:49:11 · 1579 阅读 · 4 评论 -
linux使用共享内存进行进程通信
一、什么是共享内存共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。使用共享内存进行通信的进程都需要同一段共享内存连接到它们自己的地址空间中,从而所有进程都可以访问共享内存中的数据,这段内存就好像由C语言函数malloc()分配的一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的其他进程特别提醒:共享内存并未提供同步机制,也就是说,在第一个进程结束对共原创 2020-12-28 19:11:50 · 521 阅读 · 0 评论 -
使用named_mutex和named_condition配合实现读写锁
代码代码的名称是read_write_mutex.h 初步优化 如果涉及到进程挂掉了,造成进程堵塞,如何解决?还未涉及#include <boost/interprocess/sync/named_condition.hpp>#include <boost/interprocess/sync/named_mutex.hpp>namespace bip = boost::interprocess;namespace chy{ class shared_mut原创 2020-12-26 11:41:10 · 389 阅读 · 0 评论 -
clion编译器解决undefined reference to symbol ‘shm_open@@GLIBC_2.2.5‘
修改CMakelists文件cmake_minimum_required(VERSION 3.17)project(mutex_learn)set(CMAKE_CXX_STANDARD 14)set(BOOST_ROOT "/usr/local/include/boost")#添加头文件搜索路径include_directories(/usr/local/include)#添加库文件搜索路径link_directories(/usr/local/lib)add_executabl原创 2020-12-24 23:24:43 · 1484 阅读 · 0 评论 -
使用named_mutex实现读写锁,实现进程之间读共享写独占
代码代码的名称是read_write_mutex.h 这个代码可用,但是未优化,还存在冗余的代码 如果涉及到进程挂掉了,造成进程堵塞,如何解决?还未涉及#ifndef BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP#define BOOST_THREAD_PTHREAD_SHARED_MUTEX_HPP// (C) Copyright 2006-8 Anthony Williams// (C) Copyright 2012 Vicente J. Botet原创 2020-12-24 23:22:24 · 513 阅读 · 2 评论 -
使用named_mutex实现锁机制
介绍named_mutex是一个进程锁,考虑到进程和线程之间的区别 区别:一个工作单元要想被称作进程,它必须要有操作系统指派给他的地址空间,必须拥有进程ID,必须拥有状态和进程表中的表项。进程和线程之间最大的区别是进程有着自己的地址空间,而线程共享创建它们的进程的地址空间。 本例子是使用多线程的方式来测进程锁的线程安全 等一切结束的时候,好好总结一下,完善这个大坑代码#include <boost/thread/thread.hpp>#include <boost/in原创 2020-12-24 15:54:20 · 991 阅读 · 1 评论 -
解决undefined reference to symbol ‘sem_close@@GLIBC_2.2.5‘问题
错误图示问题原因编译的时候,没有引入库文件sem()位于pthread库中,所以在编译和链接时请确保使用-pthread标志,因此在编译的时候需要导入pthread库文件 编译的顺序出现问题解决办法在clion的CMakeLists.txt文件中添加这一行代码 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")参考链接c - 使用CMake链接到pthread库(在CLion中) cmake :undefined ref..原创 2020-12-24 14:42:10 · 2335 阅读 · 0 评论 -
Synchronization 进程锁
Boost.Interprocess允许多个进程同时使用共享内存。因为共享内存从定义上来说是进程间共享的,所以Boost.Interprocess需要支持某种同步。 想到同步,我们会想到C++11标准库中的类或Boost.Thread。但是这些类只能用来同步同一进程内的线程,它们不支持不同进程的同步。不过,由于两种情况下面临的挑战是一样的,所以概念也是一样的。 在多线程应用程序中,同步对象(如mutexes和条件变量)驻留在同一个地址空间中,因此所有线程都可以使用,而共享内存的挑战是,独立的进程需要共享原创 2020-12-24 09:33:28 · 703 阅读 · 0 评论 -
使用boost模板函数实现读写锁
介绍shared_mutex即读写锁,不同与我们常用的独占式锁mutex,shared_mutex是共享与独占共存的锁,实现了读写锁的机制,即多个读线程一个写线程,通常用于对于一个共享区域的读操作比较频繁,而写操作比较少的情况。 读写锁比起mutex具有更高的适用性,具有更高的并行性,可以有多个线程同时占用读模式的读写锁,但是只能有一个线程占用写模式的读写锁,读写锁的基本规则可以总结为“写优先,读共享,交叉互斥“,具体表现为读写锁的三种状态: (1)当读写锁是写加锁状态时,在这个锁被解...原创 2020-12-22 21:29:36 · 398 阅读 · 0 评论
分享