嵌入式Linux中文站

线程中断以及线程中断引发的那些问题

阅读(154)

什么是线程中断? 在我们的 Java 程序中其实有不止一条执行线程,只有当所有的线程都运行结束的时候,这个 Java 程序才算运行结束。 官方的话给你描述一下:当所有的非守护线程运行结束时,或者其中一个线程调用了 System.exit() 方法时,这个 Java 程序才能运行结束。 线程中断的应用场景 我们先来举一个例子,比如我们现在在下载一个 500 多 M 的大片,我们点击开始下载,那个这个时候就等于开启了一个线程去下载我们的文件,然而这个时候我们的网速不是很给力,几十 KB 的在这跑,作为一个年轻

Linux系统进程的知识总结,进程与线程之间的纠葛...

阅读(104)

当一个程序开始执行后,在开始执行到执行完毕退出这段时间内,它在内存中的部分就叫称作一个进程。 Linux 是一个多任务的操作系统,也就是说,在同一时间内,可以有多个进程同时执行。我们大家常用的单CPU计算机实际上在一个时间片段内只能执行一条指令。那么Linux是如

6种Linux进程间的通信方式

阅读(289)

进程的概念 进程是操作系统的概念,每当我们执行一个程序时,对于操作系统来讲就创建了一个进程,在这个过程中,伴随着资源的分配和释放。可以认为进程是一个程序的一次执行过程。 进程通信的概念 进程用户空间是相互独立的,一般而言是不能相互访问的。但很多情况下进程间需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相通信来协调它们的行为。 进程通信的应用场景 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。 共享数据:多个进程想要操作共享数据,一个进程对

必须了解的Linux系统中的进程调度

阅读(250)

操作系统要实现多进程,进程调度必不可少。有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说某某函数比某某函数效率高XX倍一样,脱离了实际环境,这些结论是比较片面的。 而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对TASK_RUNNING状态的进程进行调度。如果进程不可执行(正在睡眠或其他),那么它跟进程调度没多大关系。 所以,如果你的系统负载非常低,盼星星盼月亮才出现一个可执行状态的进程。那么进程调度也就不会太重要。哪个进程可执行,就让它执

linux 同步机制之complete

阅读(167)

在Linux内核中,completion是一种简单的同步机制,标志things may proceed。 要使用completion,必须在文件中包含linux/completion.h,同时创建一个类型为struct completion的变量。 [cpp] view plain copy 这个变量可以静态地声明和初始化: DECLARE_COMPLETION(my_comp); 或者动态初始化: struct completionmy_comp; init_completion(my_comp); 如

Linux进程间通信——使用共享内存

阅读(203)

下面将讲解进程间通信的另一种方式,使用共享内存。 一、什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一样。而如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。 特别提醒 :共享内存并

Linux进程间通信——使用命名管道

阅读(155)

这里将会介绍进程的另一种通信方式命名管道,来解决不相关进程间的通信问题。 一、什么是命名管道 命名管道也被称为FIFO文件,它是一种特殊类型的文件,它在文件系统中以文件名的形式存在,但是它的行为却和之前所讲的没有名字的管道(匿名管道)类似。 由于Linux中所有的事物都可被视为文件,所以对命名管道的使用也就变得与文件操作非常的统一,也使它的使用非常方便,同时我们也可以像平常的文件名一样在命令中使用。 二、创建命名管道 我们可以使用两下函数之一来创建一个命名管道,他们的原型如下: [cpp] view pl

Linux系统编程--fcntl()读写锁实例

阅读(242)

在多进程对同一个文件进行读写访问时,为了保证数据的完整性,有事需要对文件进行锁定。可以通过fcntl()函数对文件进行锁定和解锁。 1. fcntl 1.1.功能描述:根据文件描述词来操作文件的特性。 1.2.用法: int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); fd:文件描述词。 cmd:操作命令。 arg:供命令使用的参数