linux编程
伶优
coder
展开
-
无锁原子操作
type __sync_fetch_and_add (type *ptr, type value, ...); // 先fetch然后自加,返回的是自加以前的值type __sync_fetch_and_sub (type *ptr, type value, ...);type __sync_fetch_and_or (type *ptr, type value, ...);type __sync_fetch_and_and (type *ptr, type value, ...);type __s原创 2022-01-26 16:55:20 · 434 阅读 · 0 评论 -
子进程退出状态
子进程的退出状态:EX_CANTCREAT中断信号:Linux 程序被外界中断时会发送中断信号,程序退出时的状态码就是中断信号值加上 128 得到的C/C++ 退出状态码:/usr/include/sysexits.h原创 2021-07-12 18:54:20 · 639 阅读 · 0 评论 -
volatile问题的深入
编译器优化常用的方法有:将内存变量缓存到寄存器;调整指令顺序充分利用CPU指令流水线,添加volatile变量后可防止其优化什么是寄存器:具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成寄存器是CPU内部的元件,拥有非常高的读写速度,用来暂存指令、数据和位址分为基本寄存器和移位寄存器两大类。基本寄存器只能并行送入数据,也只能并行输出。移位寄存器中的数据可以在移位脉冲作用下依次逐位右移或左移,数据既可以并行输入、并行输出,也可以串.原创 2021-03-04 10:09:19 · 147 阅读 · 1 评论 -
linux中常用的锁
自旋锁spinlock自旋锁的主要特征是使用者在想要获得临界区执行权限时,如果临界区已经被加锁,那么自旋锁并不会阻塞睡眠,等待系统来主动唤醒,而是原地忙轮询资源是否被释放加锁,自旋就是自我旋转,这个名字还是很形象的。自旋锁有它的优点就是避免了系统的唤醒,自己来执行轮询,如果在临界区的资源代码非常短且是原子的,那么使用起来是非常方便的,避免了各种上下文切换,开销非常小,因此在内核的一些数据结构中自旋锁被广泛的使用。互斥锁mutex使用者使用互斥锁时在访问共享资源之前对进行加锁操作,在访问完.原创 2021-01-25 13:52:05 · 170 阅读 · 0 评论 -
posix timer参数理解与简单使用示例
进程可以通过调用timer_create()创建特定的定时器,定时器是每个进程自己的,不是在fork时继承的int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid)---clock_id说明定时器是基于哪个时钟的,clock_id取值为以下:CLOCK_REALTIME :Systemwide realtime clock.CLOCK_MONOTONIC:Represents monotonic t.原创 2021-01-21 18:43:08 · 823 阅读 · 0 评论 -
linux编程:fork与vfork的区别
fork():子进程拷贝父进程的数据段,代码段vfork():子进程与父进程共享数据段fork():父子进程的执行次序不确定vfork(): 保证子进程先运行,在调用exec 或exit 之前与父进程数据是共享的,在它调用exec或exit 之后父进程才可能被调度运行vfork():保证子进程先运行,在她调用exec 或exit 之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁...原创 2021-01-15 17:57:31 · 103 阅读 · 0 评论 -
linux编程:多进程多线程的使用场景
多线程:io密集型 (读取网络,读取文件)多进程:计算 cpu耗用的多(一个程序就可以理解为一个进程 )参考链接原创 2021-01-13 11:03:12 · 296 阅读 · 0 评论 -
linux:线程间同步的几种方式
互斥锁:int pthread_mutex_lock(pthread_mutex *mutex);int pthread_mutex_unlock(pthread_mutex *mutex);信号量:int sem_init(sem_t *sem , int pshared, unsigned int value);int sem_post(sem_t *sem);int sem_wait(sem_t *sem);int sem_destroy(sem_t *sem);条件变量.原创 2021-01-12 14:18:21 · 236 阅读 · 0 评论 -
linux进程:进程间通信方式简单了解
管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访原创 2017-11-21 14:11:50 · 176 阅读 · 0 评论 -
linux IO模式:select、poll、epoll的原理与区别
1、select同步多路IO复用时间复杂度:O(n)fd_set(监听的端口个数):32位机默认是1024个,64位机默认是2048。缺点: (1)单进程打开fd有限制; (2)对socket进行扫描时是线性扫描,即采用轮询的方法,效率较低; (2)用户空间和内核空间的复制非常消耗资源;2、poll同步多路IO复用调用过程和select类似时间复杂度:O(n)其和select不同的地方:采用链表的方式替换原有fd_set数据结构,而使其没有连接数的限制。原创 2020-10-22 10:33:03 · 277 阅读 · 0 评论