Linux 系统编程
文章平均质量分 93
要内容包括Linux基本操作、进程控制原理、多进程并发编程、信号机制、线程概念、多线程并发编程、同步与互斥的概念、基于信号量与P/V操作解决同步及互斥问题、经典同步问题
浣熊会咬人
人必须有自信,这是成功的秘密。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【linux网络编程学习笔记】第二节:创建TCP通信(双向)(socket、bind、listen、accept、connect、recv、send、shutdown、server\client)
Work won't kill but worry will. 劳动无害,忧愁伤身。上一篇章中创建了TCP的客户端的服务器,但是只能单向发送,本章节主要讲解如何进行双向互发消息,实现的过程很简单,看过上一阶段的章节就不难发现可以使用线程可,进行一遍发送一遍接收。 废话不多说直接上例程TCP相关API说明点击跳转线程相关说明点击跳转tcp_server.c 服务端#include <stdio.h>#include <sys/types.h>...原创 2020-08-07 17:30:51 · 547 阅读 · 0 评论 -
【linux系统编程学习笔记】第十三节:线程的安全机制3(条件变量)(pthread_cond_wait、pthread_cond_signal、pthread_cond_broadcast)
条件变量概念: 专门为了互斥锁而诞生的辅助工具,条件变量是一种同步机制,允许线程挂起,直到共享数据上的某些条件得到满足。条件变量上的基本操作有:触发条件(当条件变为 true 时);等待条件,挂起线程直到其他线程触发条件。条件变量APIpthread_cond_init 初始化一个条件变量pthread_cond_destroy 销毁一个条件变量#include <pthread.h> int pthread_cond_i...原创 2020-07-27 19:21:32 · 784 阅读 · 0 评论 -
【linux系统编程学习笔记】第十二节:线程的安全机制2(读写锁)(pthread_rwlock_rdlock、pthread_rwlock_wrlock、pthread_rwlock_unlock)
线程的安全机制——读写锁读写锁读写锁APIpthread_rwlock_init 初始化读写锁pthread_rwlock_destroy 销毁读写锁pthread_rwlock_rdlock 上读锁pthread_rwlock_wrlock 上写锁pthread_rwlock_unlock 解锁(读锁写锁一样)例程:读写锁概念: 互斥锁与读写锁的区别就是,互斥锁不够人性化。给资源加锁的初衷就是自己操作时不会被其他线程修改,但是但多数...原创 2020-07-27 19:15:48 · 880 阅读 · 0 评论 -
【linux系统编程学习笔记】第十一节:线程的安全机制1(互斥锁)(pthread_mutex_lock、pthread_mutex_unlock、pthread_mutex_init )
互斥锁安全机制互斥锁互斥锁APIpthread_mutex_init 初始化互斥锁pthread_mutex_lock 上锁pthread_mutex_trylock 尝试上锁pthread_mutex_unlock 解锁pthread_mutex_destroy 销毁互斥锁例程:安全机制 由于线程它是共享进程里面所有的资源,自然包括虚拟内存里面的所有东西包(包含全局变量,堆内存,映射的内存及程序段落等),同时也继承了进程的所有资源...原创 2020-07-27 19:09:06 · 1168 阅读 · 0 评论 -
【linux系统编程学习笔记】第十节:线程的取消机制(杀死线程)(pthread_cancel 取消线程、pthread_cleanup_push 、pthread_cleanup_pop)
取消机制——杀死线程线程的取消机制概念取消机制相关APIpthread_cancel 取消线程pthread_setcancelstate 设置线程的取消状态pthread_setcanceltype 设置线程相应取消命令方式线程取消机制的完善完善取消机制相关APIpthread_cleanup_push 注册线程退出处理函数pthread_cleanup_pop 清除注册的退出处理函数线程的取消机制概念 所谓先线程的取消机制就是...原创 2020-07-27 19:00:30 · 807 阅读 · 0 评论 -
【linux系统编程学习笔记】第九节:线程的属性设置—线程优先级(pthread_attr_setinheritsched调度策,pthread_attr_setschedparam设置静态优先级)
线程优先级属性线程优先级属性pthread_attr_setinheritsched 设置线程是否继承父线程调度策略pthread_attr_setschedpolicy 设置线程的调度策略pthread_attr_setschedparam 设置静态优先级获取静态优先级的最小值与最大值的函数例程:测试分离属性以及栈大小例程:测试优先级线程优先级属性在任务的概念当中由于运行的需求,我们常常需要给任务一定分类,在系统里面就诞生出来所谓线程优先级 实时线程...原创 2020-07-27 18:41:55 · 6257 阅读 · 1 评论 -
【linux系统编程学习笔记】第九节:线程的属性设置1(pthread_attr_setdetachstate、pthread_t pthread_self、pthread_attr_getdeta)
线程的属性初始化 线程的属性有很多,本文主要讲解几个常用的重要属性如何设置,如果想要设置线程属性功能,就必须诞生一个线程的属性结构体变量(pthread_attr_t),并且用pthread_attr_init去初始化这个变量,当用完之后用线程的pthread_attr_destroy去销毁掉线程的属性结构体。线程属性结构体:typedef struct{ int detachstate; //线程的分离状态 int schedpolicy; ...原创 2020-07-27 18:28:39 · 1119 阅读 · 0 评论 -
【linux系统编程学习笔记】第八节:线程初认识(pthread_create 线程创建、pthread_join 线程回收、pthread_exit 线程退出)
线程初认识线程的基本概念线程特点及APIpthread_create 线程创建pthread_join 线程回收pthread_exit 线程退出例程:线程的基本概念 线程实际上是应用层的概念,一个进程内部的多条线程共享了大部分资源,但是还是有一些信息是各自独立的一一比如其运行状态,当一个线程处于睡眠的时候,另一条线程可以正在运行,而或许有些线程已经变成僵尸了!就像一个人是如果是多线程的,他就可以做到一边睡觉一边吃饭一边在洗澡!正是利用线程状态独立的特征,程...原创 2020-07-27 17:21:03 · 1886 阅读 · 0 评论 -
【linux系统编程学习笔记】第七节:进程通信方式之IPC通信机制3(信号量)
Linux中用到的信号量有3种:ststem-V信号量、POSIX有名信号量和POSIX无名信号量(本文主要讲解ststem-V信号量)。他们虽然有很多显著不同的地方,但是最基本的功能室一致的:用来表征一种资源的数量,当多个进程或者线程争夺这些稀缺资源的时候,信号量用来保证他们合理地、秩序地使用这些资源,而不会陷入逻辑谬误之中。system-V的信号量并不是单个的值,而是一组(事实上是一个数组)信号量元素构成的,当我们需要多个资源,比如多个车位时,可以同时向多个信号量元素申请。信号量的P、V操作原创 2020-07-19 11:25:22 · 262 阅读 · 0 评论 -
【linux系统编程学习笔记】第六节:进程通信方式之IPC通信机制2(共享内存)
“这一路走来的诽谤和误伤,今天看来是一记耳光,明天看来是一把糖。”The slander and misunderstanding in the growth maybe a slap on our faces today, yet it will be a handful of candy in our lives tomorrow.进程通信方式之IPC通信机制2(共享内存)共享内存相关APIint shmget(key_t key, size_t size, int shmfl.原创 2020-07-19 11:00:16 · 313 阅读 · 0 评论 -
【linux系统编程学习笔记】第五节:进程通信方式之IPC通信机制1(消息队列)
消息队列提供一种带有数据标识的特殊管道,使得每一段被写入的数据都变成带标识的消息,读取该段消息的进程只要指定这个标识就可以正确地读取,而不会受到其他消息的干扰,从运行效果来看,一个带标识的消息队列,就像多条并存的管道一样。原创 2020-07-19 10:43:14 · 623 阅读 · 0 评论 -
【linux系统编程学习笔记】第四节:进程通信方式之异步信号(signal、sigprocmask、kill)
U Need To Know When You Close Your Eyes你需要知道什么时候闭上眼睛进程通信方式之异步信号系统当中的信号分类非实时信号实时信号信号的知识点信号的相关APIsighandler_t signal(int signum, sighandler_t handler);int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);信号集合操作函数:int kill( .原创 2020-07-19 10:09:31 · 499 阅读 · 0 评论 -
【linux系统编程学习笔记】第三节:进程通信方式之匿名管道与有名管道(pipe、mkfifo、access)
其实开心好简单 最紧要好玩进程通信方式之管道进程间通信方式管道——无名管道/匿名管道无名管道相关APIint pipe(int pipefd[2]);//创建无名管道pipe管道——有名管道有名管道API进程间通信方式 管道 无名管道 pipe:适用于亲缘关系进程间的、一对一的通信 有名管道 fifo :适用于任何进程间的一对一、多对一的通信 套接字 socket:适用于跨网络的进程间通信 信号:异步通信方式 system-V IPC对..原创 2020-07-19 09:45:38 · 488 阅读 · 0 评论 -
【linux系统编程学习笔记】第一节:进程初认识(fork、wait、waitpid、exit、_exit、atexit、on_exit)
进程初认识先导知识基本概念应用场景进程的复刻进程的相关APIpid_t pid = fork( )//进程的复刻pid_t wait(int *wstatus);//回收子进程资源pid_t waitpid(pid_t pid, int *wstatus, int options);//回收子进程资源获取进程ID系列函数:void exit(int status);//退出本进程void _exit(int status);//退出本进程int atexit(void (*function)(void));原创 2020-07-18 14:07:01 · 680 阅读 · 0 评论 -
【linux系统编程学习笔记】第二节:进程的应用场景分析(pid_t vfork、Daemon进程/精灵进程、系统日志/openlog)
认真和耐心总会帮你解决大部分难题。进程的应用场景分析进程的应用场景调用第三方程序相关APIpid_t vfork(void);//进程复刻Daemon进程(翻译:精灵进程、后台进程、守护进程)系统日志相关APIvoid openlog(const char *ident, int option, int facility);//打开系统日志进程的应用场景调用第三方程序守护进程/精灵进程(服务)调用第三方程序相关APIexec系列函数:#include <unistd.h>.原创 2020-07-18 19:22:58 · 524 阅读 · 0 评论
分享