【无标题】

一、线程

1.概述:
线程是进程的一个执行分支,是在进程内部(线程本质是在进程的地址空间内运行)运行的一个执行流。

2.创建线程

#include <pthread.h>
int pthread_create(
   pthread_t *restrict tidp,   
   const pthread_attr_t *restrict attr, 
   void *(*start_rtn)(void *), 
   void *restrict arg 
 

运行程序:

运行结果:

终止线程 :void pthread_exit(void *retval);

3.线程连接

int pthread_join(
                 pthread_t tid, 
                 void **status  
                                );

 函数段:

运行程序: 

 

 

4.线程管理

线程初始化:

int pthread_attr_init(pthread_attr_t *attr);

线程销毁:

int pthread_attr_destroy(pthread_attr_t *attr);

运行:

5.互斥量、互斥锁

1.介绍:

临界区:必须以互斥方式执行的代码段,即在临界区的范围内只能有一个活动的执行线程。

互斥量(Mutex),又称为互斥锁,是用来保护临界区的特殊变量,每个互斥锁内部有一个线程等待队列,保存等待该互斥锁的线程。
有锁定(locked)和解锁(unlocked)状态:
锁定状态,某个特定的线程正持有这个互斥锁,其他线程将阻塞在互斥锁的等待队列内;
解锁状态,没有线程持有这个互斥锁,如果某个线程试图获取这个互斥锁,那么这个线程就可以得到这个互斥锁而不会阻塞。
————————————————
版权声明:本文为CSDN博主「植鱼者子云」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_68374375/article/details/124112881

2.初始化互斥锁 

int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex_attr_t *mutexattr);

mutex表示的是互斥锁的标号; mutexattr表示的互斥锁的属性。

上锁:

int pthread_mutex_lock(pthread_mutex_t *mutex);’

解锁:

int pthread_mutex_unlock(pthread_mutex_t *mutex);'

效果:

 

 3.死锁

死锁就是让两个进程不断争夺运行资源来使程序进入死锁状态

结果:

变量条件:

互斥锁用来给资源上锁,而条件变量是用来等待而不是用来上锁。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。

 

 结果:

 

 6.进程

进程的状态:
R:进程处于运行态或就绪状态,只有在该状态的进程才可能在CPU上运行;
D:不可中断的深睡眠状态,处于这种反状态的进程不能响应异步信号;
S:可中断的浅睡眠状态,处于这个状态的进程因为等待某种事件的发生而被挂起;
T:暂停状态或跟踪状态;
W:退出状态,进程即将被销毁;
Z:退出状态,进程成为僵尸进程。

1、进程环境

程序:程序是静态的,程序 = 指令序列(完成特地任务) + 数据

 进程:是一个已经开始执行但还没有终止的程序实例。

包含有进程运行环境、内存地址空间、进程ID、和至少一个被称为线程的执行控制流等资源。

一个程序可以实例化为多个进程实体。进程是一个动态的实体

程序到进程转换:查找命令所对应程序文件的位置;

使用fork()函数为之创建一个新进程;

在新进程中调用exec族函数装载程序文件,并执行程序文件的main()函数。

2.获取环境变量

获取环境变量的方式:

 

 

 3.创建进程

 运行结果:

 

4.创建守护进程:

后台运行的一种特殊进程,独立于控制终端,周期性地执行某种任务或等待处理某些事件

守护进程属于孤儿进程,父进程变为init进程

Linux系统的大多数服务器就是通过守护进程实现

常用daemon()创建守护进程

 原型:int daemon(int nochdir,int noclose);
 

 

信号函数:

sigaction函数
改变信号的处理方法,SIGKILL和SIGSTO例外。

Kill()函数
向指定的进程发送一个指定的信号,成功返回0,否则返回-1

结果:

 

4、线程与进程的关系

一个线程只能是某一个进程的一部分,一个进程可以有多个线程(至少有一个主线程)

6.开发板

1.打开LDC图像和屏幕

$ 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

4.控制LED

安装驱动

$ cd
$ cd button_driver_qemu/
$ insmod button_drv.ko #扫描你的按键
$ insmod board_100ask_qemu_imx6ull.ko 

 启动按键控制

 $ ./button_led_test

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值