- 博客(14)
- 收藏
- 关注
转载 linux学习-线程简介
线程概念典型的linux系统下面,一个进程看成只有一个线程:一个进程在某一时刻只能做一件事情。而加入了多个控制线程之后,在某一时刻我们就可以做不止一件事情。...
2018-10-22 11:06:44 211
转载 linux进程通信-共享内存
共享内存是进程间通信中最简单的方式之一。共享内存在各种进程间通信方式中具有最高的效率。因为系统内核没有对访问共享内存进行同步,您必须提供自己的同步措施。解决这些问题的常用方法是通过使用信号量进行同步。1.函数shmget我们使用函数shmget来获得一个共享内存标识符#include<key_t key,size_t size,int flag>返回值:成功返回ID,出错返回-...
2018-10-19 18:27:07 203
转载 linux进程通信-信号量
信号量:是一个计数器,用于为多个进程提供对共享资源的访问。信号量是用来调协进程对共享资源的访问的。为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域。临界区域是指执行数据更新的代码需要独占式地执行,而信号量就可以提供这样的一种访问机制,让一个临界区同一时间只有一个线程在访问它。pv操作:信号量S的物理意义,S&g...
2018-10-19 11:55:54 230
原创 linux网络通信-套接字
#include&amp;lt;sys/socket.h&amp;gt;int socket(int domain,int type,int protocol)参数domain(域)确定通信的特性域描述AF_INETIPV4因特网域AF_INET6IPV6因特网域AF_UNIXUNIX域AF_UPSPEC未指定参数type确定套接字的类型
2018-10-18 16:21:05 885 1
转载 linux进程通信-消息队列
消息队列:是消息的链接表,可以把消息看作一个记录,具有特定的格式以及特定的优先级。对消息队列有写权限的进程可以向其中按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读走消息。msgget用于创建或打开一个队列;msgsnd用于将新消息添加到队列尾端;msgrcv用于从队列中获取消息。并不一定要以先进先出的顺序取消息,也可以按消息的类型取消息。#include&lt;s...
2018-10-16 17:34:32 130
原创 linux进程-exec函数族
补充一下exec函数族:首先回顾一下fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法。int execl(const char *path, const char *arg, ...)int execv(const char *path, char *const argv[])in...
2018-10-16 10:22:17 179
原创 linux学习-信号相关函数
未决:在信号产生和递送之间的时间间隔内,我们称信号是未决的。阻塞信号递送:如果为进程产生了一个阻塞信号,而且对该信号的动作是默认动作或捕捉该信号,则为该进程将此信号保持为未决的,直到进程对此信号解除阻塞,或者对此信号的动作更改为忽略。信号屏蔽字:每个进程都有一个信号屏蔽字,它规定了当前要阻塞递送到该进程的信号集。函数kill和raise#include&lt;signal.h&gt;in...
2018-10-13 16:46:20 379
转载 linux进程通信-FIFO
FIFO 即有名管道可以在不相关的进程进行数据交换FIFO的创建#include<sys/stat.h>int mkfifo(const char *path,mode_t mode);成功返回0,出错返回-1mode参数:与open的参数相同,表示权限,不考虑移植入,可以直接用数据表示。path:路径创建一个FIFO之后,我们要用open函数打开它。FIFO的容量是有...
2018-10-12 20:04:37 246
原创 linux进程通信-管道
进程通信:也就是我们所说的IPC,包括多种形式:管道,FIFO,消息队列,信号量,共享存储。其中管道和FIFO应用于大量应用程序。管道管道是UNIX系统IPC最古老的形式。但它有两种局限性:1)它是半双工的,现在也有系统提供全双工的管道,但不利于移植。2)管道只能在具有同一个祖先的两个进程间使用管道创建通过函数pipe创建#include<unistd.h>int pi...
2018-10-12 16:10:44 223
转载 linux学习-信号简介
信号:简单理解为软件中断信号产生:1)按键产生信号,例如CTRL+C2)硬件异常产生信号,例如无效的内存引用3)进程调用kill函数将信号发送给其他进程4)用户用kill命令将信号发送给进程5)某种软件条件发生,比如alarm函数设置的定时器已超时信号的处理:1)忽略此信号,大多数信号都可以使用这种方式处理,除SIGKILLHE和SIGSTOP信号。2)捕捉信号,通知内核在某种...
2018-10-11 17:13:43 255
原创 贪心算法-会议安排问题
问题:每个会议都有个开始时间b,和结束时间e。会议安排问题就是在有限的时间内召开最多的会议,每次只能召开一个会议,所以会议时间是不能冲突的。贪心策略每次从未安排的会议中选择,具有最早结束时间的会议,当然不能与已安排会议的时间冲突。算法设计1)将n个会议的开始时间,结束时间,会议编号放在一个结构体数组中。按结束时间从大到小排序,如果结束时间相同,按开始时间从大到小排序。2)首先选择第一个具...
2018-10-11 13:16:44 3765
转载 贪心算法-背包问题
问题:山洞有n种宝物,每种宝物有一定的重量w和相应的价值v,背包的装的重量有限,只有吗,一种宝物只能拿一样,但是可以分割。求拿走的最大价值。贪心策略:每次选取单位价值量最高的物品带走,即v/w最优的物品算法设计:1)创建一个结构体,将n种宝物的重量,价值,性价比存储在结构体中,我们对性价比进行排序。2)根据我们的贪心策略,按性价比从大到小取宝物,直到到达限制的重量。实例代码#inc...
2018-10-10 19:05:40 276
转载 setjmp与longjmp函数用法
C语言中,在一个函数中执行跳转,我们使用goto语句。而执行从一个函数跳转到另一个函数,我们使用setjmp和longjmp函数的组合。include <setjmp.h>Int setjmp(jmp_buf env); 返回值:若直接调用则返回0,若从longjmp调用返回则返回非0值Void longjmp(jmp_buf env,int val);使用方法我们...
2018-10-09 12:33:22 1869
翻译 linux学习之进程控制
首先交代几个基本概念1.程序:程序是一个存储在磁盘上某个目录中的可执行文件2.进程:程序的执行实例被称为进程3.进程ID:每个进程都有一个非负整数型表示的唯一进程ID除了进程ID,每个进程还有一些其他标识符,下面是相关函数#include&lt;unistd.h&gt;pid_t getpid(void); 返回值:进程的idp...
2018-10-08 16:23:52 181
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人