linux c
芹泽
小程序员有大梦想
展开
-
linux互斥锁pthread_mutex_t和条件变量pthread_cond_t的妙用
基于生产者消费者模式的MQ(msg queue)实现了线程间通信,在生产者消费者模型中通常都会用到互斥锁pthread_mutex_t来保护共享内存资源,多个线程访问共享内核空间之前都会尝试获取mutex,如果有其他线程正在使用则当前线程进入锁等待状态。这样的机制难免会带来两个问题: 1:如果两个线程同时获取mutex,则两个线程会进入死锁状态 2:如果多个线程依次获取mutex,那么这些...原创 2018-07-24 15:42:33 · 474 阅读 · 0 评论 -
linux pthread_create线程函数的基本使用
POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。Windows操作系统也有其移植版pthreads-win32。说白了,使用Pthreads方便移值。今天我们就来学习一下Pthreads的简单用法,废...原创 2018-08-22 10:44:10 · 8109 阅读 · 0 评论 -
linux等待队列的应用场景
Linux内部的wait_queue是一个常用的东西,上次只讲实现,这次我们来聊一聊它的应用 1) 为什么要用等待队列?假设我们在 kernel 里产生一个 buffer,user 可以经由 read,write 等 system call 来读取或写资料到这个 buffer 里。如果有一个 user 写资料到 buffer 时,此时 buffer 已经满了。那请问你要如何去处理这种情...原创 2018-08-06 11:14:08 · 1160 阅读 · 0 评论 -
linux虚拟内存、内核空间和用户空间、进程上下文和中断上下文
Linux虚拟内存、内核空间和用户空间、进程上下文和中断上下文在linux编程中经常会遇到内核空间和用户空间这个概念,下面谈谈我的理解 一、虚拟内存什么叫虚拟内存?早起计算机中要运行一个程序会把程序全部装进内存然后运行,这样做有三个缺点:1)进程地址空间不隔离,不安全2)内存使用效率低:当内存空间不足时会将部分程序拷贝置硬盘给现程序腾出空间3)程序运行地址是随机分配的,...原创 2018-07-30 13:31:45 · 961 阅读 · 0 评论 -
linux等待队列 wait_queue的使用
我们先讲如何利用wait_queue,然后再讲wait_queue的内核原理如何利用wait_queue等待队列用于使进程等待某一特定的事件发生而无需频繁的轮询在不需要执行任务的时候,我们就让任务进程休眠,直到条件改变时,我们再唤醒他,执行完毕后继续让它睡眠先来看一个简单的例子:1)首先初始化等待队列头wait_queue_head_t my_queue;init_wai...原创 2018-07-21 19:12:10 · 8301 阅读 · 0 评论 -
linux中消息队列kfifo和信号量sem_t的用法
使用kfifo和sem_t配合来实现消息队列:由sem来管理目前可以发送和接收的总的消息数,由kfifo来存储消息。具体实现起来就是定义信号量sem_t_send和sem_t_recv,sem_t_send设为max_num,sem_t_recv设为0。消息发送前先判断sem_t_send是否为0,不为0就把sem_t_send减1,,然后将消息加入kfifo队列,同时将sem_t_rec...原创 2018-07-21 18:38:15 · 778 阅读 · 0 评论 -
linux线程的创建和属性pthread_attr_t设置
Posix线程中的线程属性pthread_attr_t主要包括detach属性、policy属性、优先级、继承属性、堆栈地址、scope属性、堆栈大小。在pthread_create中,把第二个参数设置为NULL的话,将采用默认的属性配置。detach属性:__detachstate,如果设置为PTHREAD_CREATE_DETACHED 则新线程不能用pthread_join()来同步,且...原创 2018-07-26 11:31:35 · 7485 阅读 · 0 评论 -
Linux进程的调度策略
Linux进程的调度策略分为以下几种: #define SCHED_OTHER 0#define SCHED_FIFO 1#define SCHED_RR 2#define SCHED_BATCH 3#define SCHED_IDLE 5 可以把它们分为两大类:实时进程- SCHED_FIFO和SCHED_RR非实时进程- SCHED_OTHER、...原创 2018-07-25 16:50:00 · 2627 阅读 · 0 评论 -
带头结点单链表的基本操作(创建、测长、打印、插入、删除、取值、合并、排序、逆置)
单链表分为带头结点和不带头结点两种,带头结点的单链表操作起来比较简单,以下是代码(创建、测长、打印、插入、删除、取值、合并、排序、逆置)#include <stdio.h>#include <malloc.h>#include <stdlib.h>//定义链表typedef struct list{ int data; stru...原创 2015-06-09 10:06:43 · 3097 阅读 · 0 评论 -
linux线程与进程的理解
首先明确一点,linux对进程和线程不做区分,统一由task_struct来管理所有进程和线程。那么如何在linux下区分进程和线程呢? 为什么要引入线程的概念?一个进程包含很多系统资源:进程控制块、虚存空间、文件系统,文件I/O、信号处理函数,创建一个进程的过程就是这些资源被创建的过程。系统调用fork创建一个进程时子进程是一段独立的内存空间,其中的资源是父进程资源的副本,两...原创 2018-08-21 18:05:03 · 9194 阅读 · 0 评论