Linux软件高级编程-线程--day8

1.线程分离属性:

      线程结束后,自动回收线程空间

      pthread_attr_init

       int pthread_attr_init(pthread_attr_t *attr);

       功能:线程属性初始化

      

      pthread_attr_destroy

       int pthread_attr_destroy(pthread_attr_t *attr);

       功能:线程属性销毁

      pthread_attr_setdetachstate 

       int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);

       功能:设置分离属性

       PTHREAD_CREATE_DETACHED   分离属性
       PTHREAD_CREATE_JOINABLE   加入属性(默认)

2.线程互斥

       1)互斥锁:

             防止资源竞争

       2)函数接口

            pthread_mutex_init:

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

             功能:互斥锁初始化

             参数:

                       mutex:互斥锁空间首地址
                       attr:互斥锁的属性(默认为NULL)

             返回值:

                       成功返回0 
                       失败返回错误码        

             pthread_mutex_lock:

             int pthread_mutex_lock(pthread_mutex_t *mutex);
                  功能:
                         上锁

             pthread_mutex_unlock:

             int pthread_mutex_unlock(pthread_mutex_t *mutex);
                  功能: 
                          解锁

         3)临界资源、临界区

               加锁解锁中间的代码称为临界资源、临界区

               同一时刻临界资源不能同时执行,只能执行其中一个临界资源代码

         4)原子操作

               CPU最小的一次不能被任务调度打断的操作称为原子操作

         5)互斥锁

               只能解决资源竞争的问题,无法同步代码(没有先后执行的顺序关系)

3.死锁

          多线程操作互斥锁,导致多个线程均无法向下执行的状态称为死锁状态

          死锁产生的四个必要条件:

                            1)互斥条件
                            2)不可剥夺条件
                            3)请求保持
                            4)循环等待

        避免产生死锁:

                   1.pthread_mutex_trylock 替代 pthread_mutex_lock
                   2.加锁顺序保持一致

4.信号量

             信号量是一种资源,可以被初始化、申请、释放、销毁

              P操作:申请资源
              V操作:释放资源

     sem_init  

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

               功能:初始化信号量

               参数:

                        sem:信号量空间首地址

                        pshared:
                                 0 一个进程中的所有线程间共享
                                 非0 进程间共享 
                        value:
                                 初始化的值

                       返回值:
                                 成功返回0 
                                 失败返回-1 

        sem_destroy:

                   int sem_destroy(sem_t *sem);

                   功能:

                           信号量的销毁

                   参数:

                            sem:信号量空间首地址

                   返回值:

                            成功返回0 
                            失败返回-1 

         sem_wait:

                     int sem_wait(sem_t *sem);

                    功能:

                            申请信号量

         sem_post:

                     int sem_post(sem_t *sem);

                     功能:

                             释放信号量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值