并发编程技术
keep_hardworking
勤能补拙,孰能生巧
展开
-
在一个程序中执行另一个程序的方法
程序:可执行文件。 进程(process):正在运行的程序,或程序的一次执行过程。 软件:程序+文档 现代操作系统都是多任务和多用户的。在一个程序中执行另一个程序的方法 1、system函数 int system(const char* command)注意参数为常量的问题#include<iostream>#include<stdlib.h>#include<stdio.h>usi原创 2017-09-04 16:11:25 · 9910 阅读 · 0 评论 -
网络通信简单代码(TCP)
服务器端程序实现步骤: 1.创建监听套接字(买一部只能接电话的手机) 2.给套接字绑定(IP)地址(相当于给手机上号) 3.将套接字设置为监听状态(开机,将手机设置为待机) 4.接受客户端连接请求(相当于接受来电请求) 5.收发数据(相互通信) 6.断开连接(挂机) 456|456|456|456|456(可重复执行) 7.关闭监听套接字(手机关机或飞行模式) #includ原创 2017-09-07 18:35:17 · 2905 阅读 · 1 评论 -
基于TCP的文件传输
技术点: chdir:将工作目录切到当前。 fprintf:拼接字符串。服务器端:#include <stdio.h>#include <errno.h>#include <string.h>#include <stdlib.h>#include <sys/stat.h>#include <sys/types.h>#include <sys/socket.h>#include <a原创 2017-09-15 08:45:10 · 1008 阅读 · 0 评论 -
网络通信
三大(通信)网络:计算机网络(有线网络,WIFI)、电信网络(有线电话,2G/3G/4G/5G)、有线电视网络 网络融合:电信网络提供基础设施(基站、线路),计算机网路借用信道传播数据 计算机网络(主流):开放、廉价实质:进程之间的通信,只需要准备好物品,写好地址(IP+端口号),其他的丢给网络就好。 IP地址:(茫茫计算机网络中)用来唯一地标识某个网络中的一台设备。 端口号(port):用原创 2017-09-07 09:51:34 · 112 阅读 · 0 评论 -
多线程实现文件拷贝
#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <pthread.h>#define N 10void* ptr_fun(void* arg);int size;int rd,wd;void main(int arg原创 2017-09-05 19:55:26 · 771 阅读 · 0 评论 -
线程同步(多线程协同使用有限资源)
1)互斥量(mutex) 全局变量:pthread_mutex_t m;//定义互斥量 主函数: pthread_mutex_init(&m,NULL);//初始化 ……操作…… //默认配置NULL pthread_mutex_destory(&m);//注销 线程函数: pthread_mutex_lock(&m);//加锁 pthre原创 2017-09-05 18:45:14 · 242 阅读 · 0 评论 -
线程
线程:进程中的一条执行路径。 在单CPU系统上,多个线程并发执行。 线程(thread):一个进程可以有多个线程,必须至少有一个线程(即主线程,主函数由主线程执行) TID:线程ID (一个程序做多个事情,一个线程相当于一个人肚子里的一条蛔虫) 一个进程中的所有线程共享该进程所有资源(空间共享,通信就直接简单了)。 进程产生后:操作系统会分配PID、私有地址空间 进程没有执行能力,进程原创 2017-09-05 18:43:17 · 418 阅读 · 0 评论 -
特殊进程
1、孤儿进程(子进程没有结束,父进程结束了,子进程就成了孤儿,被init进程收养) 2、僵尸进程(进程结束后,操作系统会保留其退出状态,进程号等信息,并放回给其父进程。父进程通过调用wait函数获取或忽略这些信息,并销毁这些信息,如果父进程不处理,就长生了僵尸进程,直到被init收养释放) 根本原因:子进程死了,父进程不管不问。 程序已经结束,但相关数据任驻留在内存(pid被占却没有使用,资源原创 2017-09-05 18:38:35 · 274 阅读 · 0 评论 -
共享内存代码
#include <stdio.h>#include <sys/ipc.h>#include <sys/shm.h>#include <string.h>#include <unistd.h>#include <stdlib.h>int main(){ int shmid=shmget(IPC_PRIVATE,100,IPC_CREAT | 0666);//创建一个公共区域/原创 2017-09-05 18:32:55 · 471 阅读 · 0 评论 -
共享内存相关函数
大多数共享内存的具体实现,都是把由不同进程之间共享的内存映射为同一段物理内存。 多个进程都把该物理内存区域映射到自己的虚拟地址空间,这些进程就都可以直接访问该共享内存区域,从而可以通过该区域进行通信。共享内存允许两个不相关的进程访问同一段物理内存, 由于数据不需要在不同的进程间复制,所以它是在两个正在运行的进程之间传递数据的一种非常有效的方式,一个进程向共享内存区域写入数据,共享该转载 2017-09-05 18:29:48 · 714 阅读 · 0 评论 -
管道
管道(pipe):分为匿名管道和命名管道 匿名管道:用于有亲缘关系的两个进程间通信int pipe2(int pipefd[2], int flags);#include <stdio.h>#include <unistd.h>#include <string.h>//int pipe(int pipefd[2]); 2只是用于告诉只有两个元素有效//把pipe两端看做两个文件,pipe原创 2017-09-04 19:22:28 · 186 阅读 · 0 评论 -
段错误调试
核心转储core dumped概念:当⼀个进程要异常终止时,可以选择把进程的用户空间内存数据全部保存到磁盘上,文件名通常是core,这叫做Core Dump。也叫核心转储,帮助开发者进行调试,在程序崩溃时把内存数据dump到硬盘上,让gdb识别 。一个进程允许产生多大的core文件取决于进程的 Resource Limit(这个信息保存在PCB中)。默认是不允许产生core文件转载 2017-09-04 18:57:32 · 239 阅读 · 0 评论 -
信号
1、信号的种类 命令:kill -l (62个) 2、信号的来源:软件、硬件 SIGINT(2号):Ctrl + C Ctrl+\(3号) :SIGQUIT SIGINT的默认处理动作是终止进程,而SIGQUIT的默认处理动作是终止进程并且Cor Dump 3、信号的产生kill函数(给指定进程发信号) int kill(pid_t pid, int sig);原创 2017-09-04 18:47:44 · 232 阅读 · 0 评论 -
进程间通信
通信方式: 1.单工通信 2.半双工通信 3.全双工通信IPC(Inter-Process Communication):进程间通信 原因:每个进程都拥有自己独立的私有地址空间,相互之间不能访问。实现方法: 1、信号(signal) 2、管道(无名管道、有名管道) 3、共享内存 4、消息队列 5、网络通信原创 2017-09-04 17:25:55 · 153 阅读 · 0 评论 -
wait() waitpid()
进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。#include #include pid_t wait(int *status) 1234参数status用来转载 2017-09-04 17:19:44 · 2641 阅读 · 0 评论 -
fork()函数
函数原型:pid_t fork(void); system,popen,exec都是通过运行指定进程,含路径 fork没有参数,是赋制进程,子进程和父进程执行位置和执行状态都一样。fork:创建一个子程序,子进程执行当前程序的副本,返回值为子程序的PID fork函数的特点:调用一次,返回”两次” fork函数创建子进程后,父子进程并发执行子进程是在fork()执行过程中产生,再接着子进程和原创 2017-09-04 17:13:16 · 311 阅读 · 0 评论 -
exec族函数用法(转载)
本节目标:exec替换进程映像exec关联函数组(execl、execlp、execle、execv、execvp)一,exec替换进程映像在进程的创建上Unix采用了一个独特的方法,它将进程创建与加载一个新进程映象分离。这样的好处是有更多的余地对两种操作进行管理。当我们创建了一个进程之后,通常将子进程替换成新的进程映象,这可以用exec系列的函数来进行。当然,exec系列的函数也可以将当前进转载 2017-09-04 16:29:03 · 431 阅读 · 0 评论 -
服务器增强版(TCP)
1) 服务器端存在的问题: *recv会阻塞 解决方法:1、多线程技术 2、 超时返回2)如何用accept获取客户端IP和端口号 3)TCP通信应用场景:注册统计信息、智能聊天、云计算 4)补充知识 计算机数据存储有两种字节优先顺序:高位字节优先和低位字节优先。Internet上数据以高位字节优先顺序在网络上传输,所以对于在内部是以低位字节优先方式存储原创 2017-09-07 18:49:02 · 315 阅读 · 0 评论