嵌入式Linux中文站

Linux 各类信号量

阅读(92)

定义:保护共享资源,使得资源在一个时刻只有一个进程(线程)拥有 原理:信号量值为正时说明空闲,若为0或负值则说明被占用 分类:内核信号量与用户信号量,用户信号量分为POXIS信号量和SYSTEMV信号量,POXIS信号量分为有名信号量和无名信号量 内核信号量: #includeasm/semaphore.h void sema_init(struct semaphore *sem, int val); void init_MUTEX(struct semaphore *sem); //初始值1 void

Linux进程间通信——使用消息队列

阅读(178)

一、什么是消息队列 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。 Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。 二、在Linux中使用消息队列 Linux提供了一系列消息队列的函数接口来让我们方便地使用它来实现进程间的通信。它的用法与其他两个System

Linux有名管道(FIFO)的阻塞和非阻塞读写

阅读(111)

有名管道的读写有阻塞和非阻塞两种,可以在open()时指定,下面我们对各种情况进行一些讨论。 //写进程 #include sys/types.h #include sys/stat.h #include errno.h #include fcntl.h #include string.h #include stdio.h #define FIFO_NAME /tmp/myfifo main() { int fd; char w_buf[50]; int w_num; // 若fifo已存在,则直接使用,

关于Linux进程你所需要知道的一切

阅读(150)

在这篇指南中,我们会逐步对进程做基本的了解,然后简要看看如何用特定命令管理 Linux 进程。 进程(process)是指正在执行的程序;是程序正在运行的一个实例。它由程序指令,和从文件、其它程序中读取的数据或系统用户的输入组成。 进程的类型 在 Linux 中主要有两种类型

Linux环境多线程编程基础设施

阅读(175)

本文介绍多线程环境下并行编程的基础设施。主要包括: Volatile __thread Memory Barrier __sync_synchronize volatile 编译器有时候为了优化性能,会将一些变量的值缓存到寄存器中,因此如果编译器发现该变量的值没有改变的话,将从寄存器里读出该值,这样可以避免内存访问。 但是这种做法有时候会有问题。如果该变量确实(以某种很难检测的方式)被修改呢?那岂不是读到错的值?是的。在多线程情况下,问题更为突出:当某个线程对一个内存单元进行修改后,其他线程如果从寄存器里

Linux IPC Pipe

阅读(110)

mkfifo() //创建有名管道(FIFO special file),创建完了就像普通文件一样open(),再读写,成功返回0,失败返回-1设errno。VS$man 3 mkfifo # include sys/types.h # include sys/stat.h int mkfifo ( const char *pathname, mode_t mode) ; pathname :the FIFO special files name mode :the FIFOs permissions.

Linux多进程编程

阅读(210)

进程的状态 Linux进程有7种基础状态(两种running算一种),除了traced都可以用 $ps 命令查看, $ps 可以查看的进程状态如下,更多进程状态信息参见Linux Process VS Thread VS LWP R running or runnable (on run queue) D uninterruptible sleep (usually IO) S interruptible sleep (waiting for an event to complete) T stopped

Linux 多线程信号量同步

阅读(113)

PV原子操作 P操作: 如果有可用的资源(信号量值0),则此操作所在的进程占用一个资源(此时信号量值减1,进入临界区代码); 如果没有可用的资源(信号量值=0),则此操作所在的进程被阻塞直到系统将资源分配给该进程(进入等待队列,一直等到资源轮到该进程)。 V操作: 如果在该信号量的等待队列中有进程在等待资源,则唤醒一个阻塞进程;如果没有进程等待它,则释放一个资源(即信号量值加1)。 模型 # include semaphore.h sem_t sem //定义信号量 sem_init() //初始化信号量