自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 LINUX进程信号量

 首先了解一下,信号量机概念是由荷兰科学家Dijkstr引入,值得一提的是,它提出的Dijksrtr算法解决了最短路径问题。      信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信。本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况,信号量是一个特殊的变量,并且只有两个操作可以改变其值:等待(wait)与信号(signal...

2018-05-30 15:51:26 806

原创 共享内存

共享内存区域是被多个进程共享的一部分物理内存多个进程都可把该共享内存映射到自己的虚拟内存空间,所有用户空间的进程若要操作共享内存,都要将其映射到自己虚拟内存空间中,通过映射的虚拟内存空间地址去操作共享内存,从而达到进程间的数据通信。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。本身不提供同步进制,可通过信...

2018-05-28 18:33:17 396

原创 消息队列

消息队列是内核中的一个链表用户进程将数据传输到内核后,内核重新添加一些如用户ID、组ID、读写进程的ID和优先级等相关信息后并打成一个数据包称为消息。允许一个或者多个进程往消息队列中写消息和读消息,但一个消息只能被一个进程读取,读取完毕后自动删除,消息队列具有一定的FIFO的特性,消息可以按照顺序发送到队列中,也可以几种不同的方式从队列中读取,每一个消息队列在内核中用唯一的IPC标识ID表示消息队...

2018-05-28 10:25:55 245

原创 System V IPC概述

1.System  V引入了三种高级进程间的通信机制:消息队列、共享内寸和信号量   IPC对象(消息队列、共享内存和信号量)存在于内核中而不是文件系统中,由用户控制释放,不像管道的释放由内核控制   IPC对象通过其标识符来引用和访问,所有IPC对象在内核空间有唯一性标志ID,在用户空间的唯一性标识符称为key   LINUX IPC 继承自System IPC2. System V IPC对象...

2018-05-28 10:10:12 6349 1

原创 mosquitto_sub、mosquitto_pub命令参数解析

1) 开启一个终端用于订阅消息:mosquitto_sub -v -t sensor2) 开启另一个终端用于发布消息:mosquitto_pub -t senor -m 123) 发布消息后,可在订阅端看到已订阅成功的信息:sensor 12mosquitto_sub解析:是订阅端终端运行的命令,-v是打印详细信息,-t是需要订阅的主题,后面紧跟的参数就是主题,这里主题叫sensor。mosqui...

2018-05-27 03:49:26 17562

原创 Xshell安装及与服务器建立连接过程

Xshell是Windows下一款功能非常强大的安全终端模拟软件,支持Telnet、Rlogin、SSH、SFTP、Serial 等协议,可以非常方便的对linux主机进行远程管理。Xshell下载地址:https://www.netsarang.com/products/xsh_overview.html 下载后按照提示进行安装即可(注意安装时授权选择“Free for Home/School”...

2018-05-27 03:42:35 75092 1

原创 Azure云服务器搭建

1. 创建学生账号,获取免费使用权登陆教育专业人员专属网站并验证,网址如下:https://azure.microsoft.com/zh-cn/education/2.仪表板中创建虚拟机2.1 选择所需的虚拟机类型:这里我们选择ubuntu系统2.2 配置虚拟机参数:这里我们需要关注用户名及密码2.3 配置完成的主页面:这里我们主要关注生成的IP地址...

2018-05-27 03:39:03 10509

原创 无名管道和命名管道的异同点

【无名管道】特点:1、只能用于具有亲缘关系的进程之间通信(父子进程或者兄弟进程)。2、是一个单工(半双工)的通信模式,具有固定的读写端。3、每次使用都需要创建管道对象。【有名管道】特点:1、可以在互不相关的进程之间实现通信。2、改管道是通过路径名来指出,在文件系统中是可以看到的,在建立管道后可以当做普通文件来使用读写操作。3、严格遵循先进先出的规则,对管道及FIFO的读总是从开始处返回数据,对它们...

2018-05-26 11:26:47 3951

原创 命名管道的通信举例

fifo_read.c#include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <string.h>#include <unistd.h>int main(int argc,char **argv){    if(argc<2)    {       printf...

2018-05-26 11:18:43 538

原创 无名管道(pipe)--实现管道双向通信

      上一篇的管道通信可以看得出来,管道通信是单向的,只能一端写入,一端读取,有点类似通信中的单工通信,若要实现双工通信,可以采用两个单工通信。同样的道理,要实现管道双向通信,采用两个管道即可。   上图完成这样一项任务:父进程负责输入两个数据x,y到管道,然后从管道读取他们相加的返回结果,子进程从管道读取x和y的值,执行add操作(这里还是和上个程序一样,采用exec函数来执行程序,所以必...

2018-05-26 11:14:39 5979

原创 无名管道(pipe)通信

这个程序用无名管道实现命令 cat /etc/passwd  |  grep root其实在终端命令中 | 就是一个管道 cat /etc/passwd会把结果打印到标准输出 ,grep  root 会把结果从标准输入实现流程:1.父进程生产两个子进程(进程扇的概念)2.子进程A:     a: 把标准输出定位到管道写端,因为此时cat /etc/passwd的结果原本要输出到标准输出,这里我们必...

2018-05-26 10:51:49 387

转载 radon变换用于车牌图像倾斜矫正

本文转载至:https://www.cnblogs.com/virqin/archive/2012/05/22/2514083.htmlRadon变换定义:下图显示了在指定的旋转角度的单一投影。间距为1个像素的平行光穿过图像,则radon变换计算穿过图像长度上的积分,即    式中       旋转角度为θ的平行束投影     f(x,y) 在垂直方向的线积分是f(X,Y)投影到X轴;在水平方向的...

2018-05-25 10:58:17 8504

原创 Linux多线程(十二)线程和信号量

1.进程中每个线程都有自己的信号屏蔽字和信号未决字2.信号的处理方式是进程中所有线程共享的3.进程中的信号是递送到单个线程的4.定时器是进程资源,进程中所有的线程共享共同的定时器例1:      下面这个例子通过一个子线程调用了alarm函数产生alarm信号,由于信号的处理方式就是进程中所有线程共享的,这个时候也就是说主线程和该子线程都有可能捕获该信号,通过下面的程序可以看出,是主程序捕获了信号...

2018-05-22 22:36:04 1823 1

原创 Linux多线程(十一)信号量实现条件变量

这份代码也是基于上两篇博文修改,利用信号量实现了条件变量:源码1:#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <semaphore.h>typedef struct{   int res;   sem_t sem;...

2018-05-22 15:07:06 772

原创 Linux多线程(十一)信号量实现互斥锁

这份代码是在之前介绍的互斥锁的代码上直接改过来的,可以对比看看account.h:#ifndef __ACCOUNT_H__#define __ACCOUNT_H__#include <pthread.h>#include <semaphore.h>typedef struct{   int code;   double balance;   sem_t sem;}Acco...

2018-05-22 14:39:43 638

原创 Linux多线程(十)信号量

相关函数:#include <semaphore.h>  int sem_init(sem_t* sem, int pshared, unsigned int value);  int sem_destroy(sem_t *sem);  int sem_wait(sem_t *sem);  int sem_trywait(sem_t *sem);  int sem_post(sem_t...

2018-05-22 14:20:11 446

原创 Linux多线程(九)条件变量3

提出问题:在处理同步的问题上,还存在这样一个现象,假设有一个项目(共享资源),有研发组(线程1)和测试组(线程2),研发组完成设计后,需要交给测试组测试,同时测试完成第一阶段测试后,反馈问题给研发组,此时研发组继续研究,解决问题,再一次较由测试组测试,不断相互同步,直至项目结束。实验源码:#include <pthread.h>#include <stdio.h>#incl...

2018-05-22 12:46:16 146

原创 Linux多线程(九)条件变量2

      接着上一个博文,如果实际场所有两条线程需要读数据,一条线程需要些数据,两条读线程都要等写线程设置完数据才能读取数据,其实只要把条件变量当成一个计数器就行,而不是像上一个例子,当成一个bool型实验源码如下:#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <uni...

2018-05-22 12:41:15 164

原创 Linux多线程(九)条件变量

条件变量的优势条件变量提供了一种线程间的通知机制,达到条件唤醒对应线程,配合互斥量,可以解决多线程中大多数的同步问题。需要信号量的解决问题的基本都可以用条件变量加互斥量解决。由于信号量使用起来容易出错,实际工程中用互斥量和条件变量的更多。互斥量可以保护共享数据的原子访问,但是无法很好的保证条件时序,单纯使用非阻塞接口配合sleep调用的忙等待会浪费CPU,也无法做到第一时间感知到条件ok。这里配合...

2018-05-22 12:36:41 194

原创 Linux多线程(八)读写锁特性举例

#include <pthread.h>#include <stdio.h>#include <stdlib.h>int main(int argc,char**argv){   if(argc<3)   {     printf("--usage %s [r r|r w |w w]\n",argv[0]);     exit(1);   }     pt...

2018-05-18 12:41:46 175

原创 Linux多线程(七)读写锁

读写锁特点:1)多个读者可以同时进行读2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)互斥锁特点:  一次只能一个线程拥有互斥锁,其他线程只有等待源码如下:在这个例程中,运行结果和之前的互斥锁一样,下一文会讲述上读锁和写锁的区别account.h#ifndef __ACCOUNT_H__#define __ACCO...

2018-05-18 12:38:55 230

原创 Linux多线程(五)多线程访问共享资源

实验:创建两条线程,线程的执行函数是取钱,(本实验有3个文件,其中account.c 和 account.h 文件是模拟银行取钱,存钱,查询余额的函数,test.c为主函数。由于账户里有10000元,两个人去取钱,结果同时取到了10000元源码如下:account.c#include "account.h"#include <assert.h>#include <malloc.h...

2018-05-18 12:29:53 1400

原创 Linux多线程(六)互斥锁

     线程实际运行过程中,我们经常需要多个线程保持同步。这时可以用互斥锁来完成任务;互斥锁的使用过程中,主要有pthread_mutex_init,pthread_mutex_destory,pthread_mutex_lock,pthread_mutex_unlock四个函数。int pthread_mutex_init(pthread_mutex_t *restrict mutex,   ...

2018-05-18 11:17:53 194

原创 Linux多线程(四)线程的分离属性

原理:在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放      线程的分离状态决定一个线程以什么样的方式来终止自己。在默认情况下线程是非分离状态的,这种情况下,原有...

2018-05-17 08:55:54 438

原创 Linux多线程(三)线程清理函数

问题:有时候希望线程退出时能够自动的执行某些函数,为了能达到此目的,OS 提供了两个函数帮我们完成这个功能:void pthread_cleanup_push(void (*rtn)(void*), void *arg);void pthread_cleanup_pop(int execute);pthread_cleanup_push是清理注册函数pthread_cleanup_pop是执行函数...

2018-05-17 08:44:16 1097

原创 Linux 多线程(二)

在实验1的基础上提出两个问题问题:1.如何给线程执行函数传入结构体参数          2.如何获取线程执行函数的返回值实验源码如下:#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>typedef struct{   char name[20];...

2018-05-17 01:08:08 221

原创 Linux 多线程(一)

1.学习如何创建多线程2.创建多线程的函数的参数定义3.主线程和子线程的关系,如何实现调度实验简介:在主线程开辟两个新线程,分别为乌龟线程和兔子线程,模拟龟兔赛跑的过程主要函数介绍:pthread_t rabbit,turtle;定义变量pthread_create(&rabbit,NULL,th_fn,(void *)10)//创建一个线程,线程会执行th_fn函数里面的内容,     ...

2018-05-17 01:04:12 187

原创 style常见属性

一、常用属性: 1、Height:设置DIV的高度。 2、Width:设置DIV的宽度。 例: 复制代码代码如下:<div style="width:200px;height:200px;background-color:Black;"> </div> 3、margin:用于设置DIV的外延边距,也就是到父容器的距离。 例: 复制代码代码如下:<div style="...

2018-05-12 12:52:52 8543

转载 高德地图KEY申请

1.首先我们需要去“高德地图开发平台”通过“百度搜索 ”或者“谷歌搜索 ” 高德地图然后会有一个高德开发平台|高德地图apl  2.登录高德开发平台这是高德开发平台的官网,然后点击登录,没有注册就好  3.进入控制台创建新应用进入控制台之后选择“应用管理”然后点击创建新应用,一定要记得这一步哟   应用的名称和类型更具自己的实际情况选择 创建好之后就会有一个新的应用了,然后点击添加key 在这里填...

2018-05-12 10:40:41 15605

转载 Ubuntu 14.04上安装和配置Apache

本篇博客主要介绍一下Linux系统如何安装web服务器————Apache的安装和配置(Apache是全球使用率最高的、开源的一个Web服务端软件,现在介绍一下如何在Ubuntu 14.04上安装和配置Apache)此次以ubantu系统为例,如果有机会再向大家介绍其他linux系统web服务器的安装。这里关于ubantu虚拟机的安装过程省略。首先,进入ubantu虚拟机:第一步:命令行安装Apa...

2018-05-12 10:04:47 5854 1

转载 可重入函数

实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果有一个函数不幸被设计成为这样:那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。这样的函数是不安全的函数,也叫不可重入函数。相反,肯定有一个安全的函数,这个安全的函数又叫可重入函数。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。一个可重入的函数...

2018-05-08 00:14:00 121

原创 IO缓冲类型

ANSI C里定义的标准I/O是一种带缓冲的高级磁盘I/O,目的是尽可能减少使用read和write系统调用的次数,从而提高I/O效率。标准I/O提供了3种类型的缓冲类型。全缓冲。在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。对驻留在磁盘上的文件的访问通常是由标准I/O库实施全缓冲的。行缓冲。在这种情况下,当在输入和输出中遇到新行符时,标准I/O库执行I/O操作,这允许我们一次输出一个...

2018-05-07 23:37:12 423

原创 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

方法1:利用构造函数求解class Temp{    public :       Temp(){++N;Sum+=N;}       static void reset(){N=0;Sum=0;}       static int GetSum(){return Sum;}    private:       static int N;       static int Sum;};int Te...

2018-05-07 00:05:00 141

原创 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针

class Solution {public:    TreeLinkNode* GetNext(TreeLinkNode* pNode)    {        if(pNode==NULL)             return NULL;         TreeLinkNode* next=NULL;         //1.判断该节点的右节点是否为空,若不为空,则下一个节点为该节点一直遍...

2018-05-06 23:09:29 657

转载 进程同步的几种机制

多进程的系统中避免不了进程间的相互关系。本讲将介绍进程间的两种主要关系——同步与互斥,然后着重讲解解决进程同步的几种机制。       进程互斥是进程之间发生的一种间接性作用,一般是程序不希望的。通常的情况是两个或两个以上的进程需要同时访问某个共享变量。我们一般将发生能够问共享变量的程序段称为临界区。两个进程不能同时进入临界区,否则就会导致数据的不一致,产生与时间有关的错误。解决互斥问题应该满足互...

2018-05-06 00:41:08 4040

转载 进程/线程同步的方式和机制,进程间通信

本文转自至:https://www.cnblogs.com/virusolf/p/5331946.html 一、进程/线程间同步机制。临界区、互斥区、事件、信号量四种方式临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对...

2018-05-06 00:39:01 290

原创 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。

假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5class Solution {public:    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {        //1.先判断二叉树是否为空  ...

2018-05-05 23:13:55 142

原创 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5

class Solution {public:    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {        //1.先判断遍历的二叉树是否为空,其实一般来说检查一项就行        if((pre.size()==0)||(vin.size()==0))            r...

2018-05-05 23:11:34 128

原创 输入一个链表,从尾到头打印链表每个节点的值

class Solution {public:    vector<int> printListFromTailToHead(ListNode* head) {        /*方法1        stack<ListNode*> node;        vector<int> arr;        ListNode* p=head;        wh...

2018-05-05 22:36:18 211

原创 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。

 bool duplicate(int numbers[], int length, int* duplication) {        /*方法1        int temp;        if(numbers==nullptr||length<=0)            return false;        for(int i=0;i<length;i++)     ...

2018-05-05 18:22:55 536

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除