嵌入式 线程与进程

本文深入探讨了嵌入式系统中的线程与进程概念,通过实例展示了如何在Ubuntu上创建、管理线程和进程。内容包括线程的创建与终止、进程的连接与分离、互斥量保护的多线程同步、条件变量的使用,以及多进程的创建和守护进程的实现。此外,还介绍了信号处理函数sigaction的使用。
摘要由CSDN通过智能技术生成

1. 查看源代码
1. 线程与进程
在一些操作中,等待的时间是比较长的,为避免卡顿,或者反应不及时引入线程和进程。

进程是资源分配的最小单位,线程是CPU调度的最小单位。
单进程单线程:一个人在一个桌子上吃菜。
单进程多线程:多个人在同一个桌子上一起吃菜。
多进程单线程:多个人每个人在自己的桌子上吃菜。

ubuntu默认没有pthread库,需要安装。

sudo apt-get install -y glibc-doc manpages-posix-dev


查看pthrea手册,提示:

$ man pthreads
No manual entry for pthreads
#安装manpages
$ sudo apt-get install manpages-posix manpages-posix-dev


2. 编译各个程序并在Ubuntu运行;理解并解释运行状态和结果
2. 多线程
(1)线程的创建与终止
函数

#include <pthread.h>  
    int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);


说明

参数    用法
返回值    成功:0; 失败:错误号 //Linux环境下,所有线程特点,失败均直接返回错误号。
pthread_t    当前Linux中可理解为:typedef unsigned long int pthread_t;//无符号长整形
参数1    传出参数,保存系统为我们分配好的线程ID
参数2    通常传NULL,表示使用线程默认属性。若想使用具体属性也可以修改该参数。
参数3    函数指针,指向线程主函数(线程体),该函数运行结束,则线程结束。参数是函数指针,只能传递函数名,不能传递参数。所以就是只能有一个参数。
参数4    线程主函数执行期间所使用的参数。
编译并执行

gcc -o ptread pthread.c -lpthread
./ptread


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkBzbWlsZV4,size_20,color_FFFFFF,t_70,g_se,x_16
由于线程之间的竞争可能导致每次输出不一样。

 

#include<unistd.h>
for (index = 0; index < array_num; index++) { /* 循环创建 5个线程 */
    printf("In main: creating thread %ld.\n", index);
    returned_code_err = pthread_create(&thr_num_array[index], NULL, thread_function, (void *) index); /* 创建线程 */
    sleep(1);         //创建线程后延时


watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkBzbWlsZV4,size_20,color_FFFFFF,t_70,g_se,x_16

 

(2)进程的连接与分离
函数

#include <pthread.h>
    int pthread_join(pthread_t thread, void **retval);


说明

参数    用法
参数1    被等待的进程表示符
参数2    一个用户定义的指针,可以用来存储被等待线程的返回值
部分代码    
for(index=0; index<NUM_THREADS; index++) 
{
    printf("Main: creating tid_array %ld\n", index);
    err = pthread_create(&tid_array[index], NULL, thread_func, (void *)index); /* 创建线程 */
    if (err) 
    {
        printf("ERROR; return code from pthread_create() is %d\n", err);
        exit(-1);
    }
    err = pthread_join(tid_array[index], &status); /*等待线程终止,并获取返回值*/
    if (err) 
    {
        printf("ERROR; return code from pthread_join() is %d\n", err);
        exit(-1);
    }
    printf("Main: comp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值