线程概念
线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。 一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。 多线程即就是一个程序中有多个线程在同时执行。 单线程程序:若有多个任务只能依次执行。 当上一个任务执行结束后,下一个任务开始执行。
线程的创建与终止
在Ubuntu中默认是没有pthread库的,需要进行安装安装
$ sudo apt-get install -y glibc-doc manpages-posix-dev
安装完成后即可查看pthread的使用手册man pthreads
1、创建线程
#include <pthread.h>
int pthread_create(
pthread_t *restrict tidp, //新创建的线程ID指向的内存单元。
const pthread_attr_t *restrict attr, //线程属性,默认为NULL
void *(*start_rtn)(void *), //新创建的线程从start_rtn函数的地址开始运行
void *restrict arg //默认为NULL。若上述函数需要参数,将参数放入结构中并将地址作为arg传入。
);
2、终止线程
使用vim pthread_exit()终止线程
void pthread_exit(void*_retval)
3、线程编译
使用之前学过的vim makefile编辑makefile
gcc wenjianming.c -o wenjianming.out
然后输入
./1.pthread_create_exit.out
即可完成编译
4、线程的分离与连接
int pthread_join(pthread_t thread, void **retval);
int pthread_detach(pthread_t thread);
示例
输入
$ ./2.pthread_join.out
5、使用互斥量,互斥锁
初始化互斥锁
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex_attr_t *mutexattr);
在访问临界资源前,需要上锁
int pthread_mutex_lock(pthread_mutex_t *mutex);
在访问临界资源结束,需要解锁
int pthread_mutex_unlock(pthread_mutex_t *mutex);
互斥锁示例
输入
$ ./4.pthread_mutex.out
6、条件变量
输入
$ ./6.pthread_conditional_var.out
可得运行结果
进程概念
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体
进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。
所以要测试获取环境变量代码
1、测试创建的进程程序代码
在Linux中,创建子程序需要用到fork(),fork()对父子进程各返回一次,
父进程:子进程的PID,
子进程:0;
失败: 小于0;
输入
$ ./3-fork-print-pid.out
2、使用daemon创建守护进程
概念
守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件,它不需要用户输入就能运行并提供某种服务。
示例
3、信号函数sugaction的使用
概念
信号函数用来通知进程发生了异步事件。
示例
输入
./9-async-signal-sigaction.out
可以看到都是sleeping
开发板
下载开发板进入ubuntu-18.04_imx6ul_qemu_system目录,执行install_sdl.sh
打开开发板
1、LCD屏幕图像
使用fb-test打开屏幕,输入
$ fb-test
$ cd myfb-test
$ ./myfb-test /dev/fb0
2、串口EEPROM
列出所有串口
$ cd
$ i2cdetect -l #列出所有ic2总线
$ i2cdetect -y 0 #列出总线0上的设备
3、命令控制LED
打开并安装LED驱动
$ cd
$ cd led_driver_qemu/
$ insmod 100ask_led.ko
控制LED零号灯亮,LED一号灯灭
$ ./ledtest /dev/100ask_led0 on
$ ./ledtest /dev/100ask_led1 off
3、按键控制LED
启动按键控制
$ cd
$ cd button_driver_qemu/
$ insmod button_drv.ko #扫描你的按键
$ insmod board_100ask_qemu_imx6ull.ko