进程
一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。
线程
又称其为轻量级进程(Light Weight Process)。是操作系统能够进行运算调度的最小单位。大部分情况下,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。他们彼此之间交替执行,称为多线程;
多线程
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。
一个进程(process)含有两个线程(threads)的运行
Ubuntu默认是没有pthread库的,需要安装。输入命令:
sudo apt-get install -y glibc-doc manpages-posix-dev
sudo apt-get install manpages-posix manpages-posix-dev
使用命令:gcc thread_create.c -o thread_create -lpthread编译,注意不要忘了加 -lpthread,否则会出现如下的错误
/tmp/ccjfZIN3.o: In function `main':
thread_create.c:(.text+0x8b): undefined reference to `pthread_create'
thread_create.c:(.text+0xc0): undefined reference to `pthread_create'
thread_create.c:(.text+0xeb): undefined reference to `pthread_join'
thread_create.c:(.text+0xfc): undefined reference to `pthread_join'
collect2: ld returned 1 exit status
pthread_join()函数功能为等待指定线程结束,其放在主线程中目的是等待子线程结束,主线程再继续运行,其代码如下
#include
int pthread_join(pthread_t thread, void **retval);
1.thread为一指定的需要等待运行结束的线程
2.retval为线程的退出码
可以看出,pthread_join()等到线程结束后,程序才继续执行。
互斥锁
互斥锁是用一种简单的加锁方法来控制对共享资源的原子操作。这个互斥锁只有两种状态,即上锁和解锁,可以把互斥锁看做某种意义上的全局变量。在同一个时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行操作。若其他线程希望上锁一个已经被上锁的互斥锁,则该线程就会被挂起,直到上锁的线程释放掉互斥锁为止。可以说,这把互斥锁保证让每个线程对共享资源按顺序进行原子操作。
互斥锁机制主要包括以下基本函数:
● 互斥锁初始化:pthread_mutex_init()
● 互斥锁上锁:pthread_mutex_lock()
● 互斥锁判断上锁:pthread_mutex_trylock()
● 互斥锁解锁:pthread_mutex_unlock()
● 消除互斥锁:pthread_mutex_destroy()
其中,互斥锁可以分为快速互斥锁、递归互斥锁和检错互斥锁。这3种锁的区别主要在于其它未占有互斥锁的线程在希望得到互斥锁时是否需要阻塞等待。快速互斥锁是指调用线程会阻塞直至拥有互斥锁的线程解锁为止;递归互斥锁能够成功地返回,并且增加调用线程在互斥上加锁的次数而检错互斥锁则为快速互斥锁的非阻塞版本,它会立即返回并返回一个错误信息。默认属性为快速互斥锁。
条件变量用来阻塞一个线程,直到其他的线程通知它条件已经满足为止。
gcc -o Untitled-5.out Untitled-5.c -lpthread -lm
./Untitled-5.out
下载
$ git clone https://e.coding.net/weidongshan/ubuntu-18.04_imx6ul_qemu_system.git
安装
ubuntu-18.04_imx6ul_qemu_system
目录,执行install_sdl.sh
如下所示: $ cd /home/suliu/Desktop/ubuntu-18.04_imx6ul_qemu_system/
$ ls
imx6ull-system-image qemu-imx6ull-gui_test.sh source
install_sdl.sh qemu-imx6ull-nogui.sh ubuntu-18.04_sdl-package
qemu README.md
qemu-imx6ull-gui.sh rootfs_test
$ install_sdl.sh
运行QEMU
./qemu-imx6ull-gui.sh
如下所示:参考
Linux多线程编程(一)---多线程基本编程_玖零大壮的博客-CSDN博客_linux 多线程
linux 多线程_进程_开发板_dfjkhksc的博客-CSDN博客
【嵌入式Linux】线程与进程_sl……的博客-CSDN博客
感谢!