Linux软件编程:线程

1.线程是一个轻量化的进程,包括创建、调度、回收的整个过程。

2.线程的创建:线程被创建后独享8M栈区,共享进程中的文本段、数据段和堆区。

3.线程的调度:宏观并行,微观串行

4.线程的回收:线程执行结束后,回收线程空间,避免产生僵尸线程

5.线程和进程的区别:

        进程是系统资源分配的最小单元

        线程是CPU任务调度的最小单元

6.多线程和多进程的对比:

        执行效率:多线程>多进程

        通信效率:多线程>多进程

        安全性:多进程>多线程

        通信复杂度:多进程>多线程

7.线程的创建

        pthread_create

        int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)

        功能:

                在进程空间创建一个线程

        参数:

                thread:存放线程ID的首地址

                attr:线程的属性空间首地址(默认传NULL)

                start_routine:线程要执行的函数的地址

                arg:对线程函数传递的参数

        返回值:

                成功返回0

                失败返回非0

        注意:

                编译时需要加-lpthread链接线程库

                gcc filename.c -lpthread

8.pthread_exit

        void pthread_exit(void *retval(默认NULL))

        功能:线程退出

        参数:

                retval:线程退出时的值

        返回值:缺省

9.pthread_join

        int pthread_join(pthread_t thread, void *retval(默认NULL))

        功能:线程回收

        参数:

                thread:回收线程的ID

                retval:存放线程结束值的空间首地址

        返回值:

                成功返回0;

                失败返回非0;

        注意:pthread_join具有阻塞功能,线程不结束会一直阻塞等待

                   pthread_join具有同步功能

10.互斥锁

        1.引入互斥锁解决资源竞争的问题

        2.在操作资源前上锁,在操作资源后解锁

        3.函数接口:

                1.pthread_mutex_init

                int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr)

                功能:初始化互斥锁

                参数:

                        mutex:互斥锁空间首地址

                        attr:互斥锁属性,默认传递NULL

                2.pthread_mutex_destroy

                int pthrread_mutex_destroy(pthread_mutex_t *mutex)

                功能:销毁互斥锁

                参数:

                        mutex:互斥锁空间首地址

                3.pthread_mutex_lock

                int pthread_mutex_lock(pthread_mutex_t *mutex)

                功能:互斥锁上锁

                4.pthread_mutex_unlock

                int pthread_mutex_unlock(pthread_mutex_t *mutex)

                功能:互斥锁解锁

11.死锁

        1.多线程通信由于加锁问题导致多任务均无法向下执行的状态称为死锁

        2.死锁产生的4个必要条件:

                1.互斥条件

                2.不可剥夺条件

                3.请求保持

                4.循环等待

        3.避免产生死锁

                1.多线程任务加锁顺序保持一致

                2.pthread_mutex_trylock替换pthread_mutex_lock

12.线程任务同步

        1.信号量:

                是一种资源,可以被申请、释放、初始化

                释放:让资源数+1,不会阻塞

                申请:让资源数-1,如果当前资源数为0,申请资源时会阻塞等待,直到资源不为0,才能继续向下执行

        2.函数接口

                1.sem_init

                int sem_init(sem_t *sem, int pshared, unsigned int value)

        功能:信号量的初始化

        参数:

                sem:信号量空间首地址

                pshared:

                        0:线程使用

                        非0:进程使用

                value:

                        信号量初始化的值

        返回值:

                成功返回0

                失败返回-1

        2.sem_destroy

        int sem_destroy(sem_t *sem)

        功能:信号量的销毁

        3.sem_wait

        int sem_wait(sem_t *sem)

        功能:信号量资源申请

        4.sem_post

        int sem_post(sem_t *sem)

        功能:信号量资源释放

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值