From 13571c08f1b393595b04e86cdcdf12909e17d824 Mon Sep 17 00:00:00 2001 From: chenxiaolong <2764476004@qq.com> Date: Tue, 15 Sep 2020 23:26:52 +0800 Subject: [PATCH 1/3] add new blog thread --- content/blog/2020/Thread_cxl_3/img/1.png | Bin 0 -> 18350 bytes content/blog/2020/Thread_cxl_3/img/2.png | Bin 0 -> 9632 bytes content/blog/2020/Thread_cxl_3/img/3.png | Bin 0 -> 10709 bytes content/blog/2020/Thread_cxl_3/img/4.png | Bin 0 -> 9970 bytes content/blog/2020/Thread_cxl_3/img/5.png | Bin 0 -> 4504 bytes content/blog/2020/Thread_cxl_3/index.md | 291 +++++++++++++++++++++++ 6 files changed, 291 insertions(+) create mode 100644 content/blog/2020/Thread_cxl_3/img/1.png create mode 100644 content/blog/2020/Thread_cxl_3/img/2.png create mode 100644 content/blog/2020/Thread_cxl_3/img/3.png create mode 100644 content/blog/2020/Thread_cxl_3/img/4.png create mode 100644 content/blog/2020/Thread_cxl_3/img/5.png create mode 100644 content/blog/2020/Thread_cxl_3/index.md diff --git a/content/blog/2020/Thread_cxl_3/img/1.png b/content/blog/2020/Thread_cxl_3/img/1.png new file mode 100644 index 0000000000000000000000000000000000000000..e246da15bedc0aae1035a1066ed31b3a4366868c GIT binary patch literal 18350 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�@2wbqIL0ksWB9rk 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 V4;_DSoDTr%D%y9y+<6l6e*nd&byWZW literal 0 HcmV?d00001 diff --git a/content/blog/2020/Thread_cxl_3/img/3.png b/content/blog/2020/Thread_cxl_3/img/3.png new file mode 100644 index 0000000000000000000000000000000000000000..ac79096f782ec20745835ca1045ff12093390092 GIT binary patch literal 10709 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 literal 0 HcmV?d00001 diff --git a/content/blog/2020/Thread_cxl_3/img/5.png b/content/blog/2020/Thread_cxl_3/img/5.png new file mode 100644 index 0000000000000000000000000000000000000000..8a7181d142326b1feb706157b46b13b0e0376384 GIT binary patch literal 4504 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 CJetD* literal 0 HcmV?d00001 diff --git a/content/blog/2020/Thread_cxl_3/index.md b/content/blog/2020/Thread_cxl_3/index.md new file mode 100644 index 0000000..78e9752 --- /dev/null +++ b/content/blog/2020/Thread_cxl_3/index.md @@ -0,0 +1,291 @@ +--- +title: "linux下的多线程的使用" +date: 2020-09-15T19:00:57+08:00 +author: "陈小龙" +keywords: ["linux","mutex"] +categories : ["你的分类标题"] +banner : "img/blogimg/default.png" +summary : "本文章主要介绍了linux中多线程编程,对于多线程同时访问临界资源产生的冲突,利用互斥锁机制解决,对于互斥锁的引入可能会产生的死锁和饥饿,针对这两个问题给出了具体的解决办法。" +--- + +标题:linux下的多线程的使用 + +内容:本文章主要介绍了linux中多线程编程,对于多线程同时访问临界资源产生的冲突,利用互斥锁机制解决,对于互斥锁的引入可能会产生的死锁和饥饿,给出了具体的解决办法。 + + 本文章介绍的主要介绍图: + +![img](img/1.png) + + + +1.多线程举例 + +程序代码 + +\#include + +\#include + +\#include + +int global=0; + +void *add(void *) + +{ + +​ int i=5000; + +​ while(i--){ + +​ int tmp=global; + +​ printf("global=%d\n",global); + +​ global=tmp+1; + + } + +} + + int main(){ + +​ pthread_t t1,t2; + +​ pthread_create(&t1,NULL,add,NULL); + +​ pthread_create(&t2,NULL,add,NULL); + +​ pthread_join(t1,NULL); + +​ pthread_join(t2,NULL); + +​ printf("global is %d",global); + +​ return 0; + +} + +结果一: + +![img](img/2.png) + +结果二: + +![img](img/3.png) + +结果三: + +![img](img/4.png) + +结论:3次运行结果均不一样,足以说明多线程在同步访问全局变量global时发生了冲突。 + +2.解决多线程的冲突问题---引入互斥锁 + +(1)互斥锁:(Mutex,Mutual Exclusive Lock),获得锁的线程可以完成“读-修改-写”的操作,然后释放锁给其它线程,没有获得 锁的线程只能等待而不能访问共享数据,这样“读-修改-写”三步操作组成一个原子操作,要么都执行,要么都不执行,不会执行到中间被打断,也不会在其它处理器上并行做这个操作。 + +(2)互斥锁的创建和销毁 + +1>定义互斥锁 + +Pthread_mutex_t lock; + +2>互斥锁的初始化 + +如果lock是局部变量—可用初始化函数pthread_mutex_init初始化。 + +int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr); + +参数说明:mp 互斥锁地址 mattr 属性 通常默认 null + +初始化互斥锁之前,必须将其所在的内存清零。 + +如果互斥锁已初始化,则它会处于未锁定状态。互斥锁可以位于进程之间共享的内存中或者某个进程的专用内存中。 + +返回值:成功返回0,失败返回错误号。 + +如果lock是静态或全局变量—可用 **PTHREAD_MUTEX_INITIALIZER**初始化 ,相当于用pthread_mutex_init初始化并且attr参数为NULL。 + +3>加锁与解锁 + +int pthread_mutex_trylock(pthread_mutex_t* mutex);*//**非阻塞式加锁* + +int pthread_mutex_lock(pthread_mutex_t* mutex)*//**阻塞式加锁* + +int pthread_mutex_unlock(pthread_mutex_t* mutex)*//**解锁* + +如果一个线程既想获得锁,又不想挂起等待,可以调用pthread_mutex_trylock;如果Mutex已经被 另一个线程获得,这个函数会失败返回EBUSY,而不会使线程挂起等待。 + +4>销毁锁资源(在加上锁的情况下进行,相当于没加锁资源) + +int pthread_mutex_destroy(pthread_mutex_t* mutex); + +返回值:成功返回0,失败返回错误号。 + +(3)代码实现 + +\#include + +\#include + +\#include + +int global=0; + +pthread_mutex_t lock=PTHREAD_MUTEX_INITIALIZER; + +void *add(void *) //函数指针 + +{ pthread_mutex_lock(&lock); + +​ int i=5000; + +​ while(i--){ + +​ int tmp=global; + +​ printf("global=%d\n",global); + +​ global=tmp+1; } + +​ pthread_mutex_unlock(&lock); + +} + +int main() + +{ pthread_t t1,t2; + +​ pthread_create(&t1,NULL,add,NULL); + +​ pthread_create(&t2,NULL,add,NULL); + +​ pthread_join(t1,NULL); + + pthread_join(t2,NULL); + +​ printf("global is %d\n",global); + +​ return 0; + +} + +如果没有线程的等待,则线程就不能成功执行 + +(4)互斥锁的加锁和解锁是原子的 + +加锁解锁指令必须依赖于一条汇编指令:swap和exchange(原子操作)。大多数体系结构都提供了swap或exchange指令,该指令的作用是把寄存器和内存单元的数据相交换,由于只有一条指令,保证了原子性,即使是多处理器平台,访问内存的总线周期也有先后,一个处理器上的交换指令执行时另一个处理器的交换指令只能等待总线周期。 + +每个互斥锁都有一个等待队列 + +原子操作:不可以被中断的一个或者一系列操作 + +注意:互斥锁的加入可能会引入“饥饿”和死锁问题 + +(5)死锁: + +1)线程自己将自己锁住 + +一般情况下,如果同一个线程先后两次调用lock,在第二次调⽤用时,由于锁已经被占用,该线程会挂起等待占用锁的线程释放锁,然而锁正是被自己占用着的,该线程又被挂起而没有机会释放锁,因此 就永远处于挂起等待状态了,于是就形成了死锁(Deadlock) + +2)多线程抢占锁被困 + +如线程A获 得了锁1,线程B获得了锁2,这时线程A调用lock试图获得锁2,结果是需要挂起等待线程B释放 锁2,而这时线程B也调用lock试图获得锁1,结果是需要挂起等待线程A释放锁1,于是线程A和B都 永远处于挂起状态了,死锁再次形成。 + +![这里写图片描述](img/5.png) + +3)处理死锁的方法 + +预防死锁、避免死锁、检测死锁、解决死锁 + +注:可以利用银行家算法避免死锁 + +(6)饥饿:指一个可运行的进程尽管能继续执行,但被调度程序无限期地忽视,而不能调度执行的情形。可以利用同步机制协调多线程间的饥饿问题。 + +3 条件变量 + +(1) 概念:条件变量时描述某些资源就绪与否的状态,为了实现同步而引入。 + +(2) 条件变量的使用 + +​ 1)创建条件变量 + +​ Pthread_cond_t condition; + +​ 2)条件变量的初始化 + +​ 若条件变量是局部的,则通过pthread_mutex_init初始化。 + +​ int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr); + +​ 若条件变量是静态的或者是全局的使用**PTHEAD_COND_INITIALIZER**初始化。 + +​ 返回值:返回值为0表示正确,其他的结果均为错误。人 + +3)条件变量的操作 + +int pthread_cond_broadcast(pthread_cond_t* cond);//唤醒条件变量等待的所有线程 + +int pthread_cond_signal(pthread_cond_t* cond)//唤醒条件变量上等待的一个线程 + +int pthread_cond_wait(pthread_cond_t* cond)//解锁互斥量并等待条件变量触发 + +int pthread_cond_timewait(pthread_cond_t* cond,int abstime)//pthread_cond_wait,但可设定等待超时 + +​ 注意:pthread_cond_wait 自动解锁互斥量(如同执行了 pthread_unlock_mutex),并等待条件变量触发; pthread_cond_timedwait与pthread_cond_wait,**区别**在于,如果达到或是超过所引用的参数*abstime,它将结束并返回错误ETIMEDOUT; 当调用pthread_cond_signal时一个在相同条件变量上阻塞的线程将被解锁; pthread_cond_broadcast,则将通知阻塞在这个条件变量上的所有线程。 + +​ 4)销毁条件变量 + +​ int pthread_cond_destroy(pthread_cond_t* cond); + +4.信号量 + +1)信号量:可以使同一时间段的一个线程访问临界区,用来协调进程对共享资源的访问 + +2)信号量的工作原理: + +由于信号量只能进行两种操作等待和发送信号,即P(vs)和V(vs) + +P(sv):如果sv的值大于零,就给它减1;如果它的值为零,就挂起该进程的执行 + V(sv):如果有其他进程因等待sv而被挂起,就让它恢复运行,如果没有进程因等待sv而挂起,就给它加1. + +3)信号量的使用 + +1>创建信号量: sem_t sem; + +2>初始化信号量:int sem_init(sem_t *sem,int pshared,unsigned int value); + +Sem为指向信号量结构的一个指针; + +如果Pshared参数为0,表示信号量用于同一进程的线程间同步; + +如果`pshared`参数具有非零值,则信号量在进程之间共享; 在这种情况下,任何可以访问信号量的进程都可以利用`*sem*`用于执行 `sem_wait()`,`sem_trywait()`和`sem_post()`,以及`sem_destroy()`操作. + +Value给出了信号量的初始值 + +3>信号量的操作 + +P操作: + +int sem_wait(sem_t *sem);//信号量的P操作 + +int sem_trywait(sem_t *sem);//信号量的P操作(非阻塞版本) + +int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);//abs_timeout是UTC时间戳 + +sem_wait()可以获得资源(P操作),使semaphore的值减1,如果调⽤sem_wait()时 + semaphore的值已经是0,则挂起等待 + +V操作: + +Int sem_post(sem_t *sem);//信号量的V操作 + +调用sem_post() 可以释放资源(V操作),使semaphore 的值加1,同时唤醒挂起等待的线程。 + +4>销毁信号量 + +Int sem_destroy(sem_t *sem); + + + + \ No newline at end of file -- Gitee From 13270e06530495b8b8621ac9ab4a9354bdef352c Mon Sep 17 00:00:00 2001 From: chenxiaolong <2764476004@qq.com> Date: Tue, 15 Sep 2020 23:41:39 +0800 Subject: [PATCH 2/3] add new blog thread --- content/blog/2020/Thread_cxl_3/index.md | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/content/blog/2020/Thread_cxl_3/index.md b/content/blog/2020/Thread_cxl_3/index.md index 78e9752..d4476f8 100644 --- a/content/blog/2020/Thread_cxl_3/index.md +++ b/content/blog/2020/Thread_cxl_3/index.md @@ -4,14 +4,10 @@ date: 2020-09-15T19:00:57+08:00 author: "陈小龙" keywords: ["linux","mutex"] categories : ["你的分类标题"] -banner : "img/blogimg/default.png" +banner : "img/blogimg/cxl_3" summary : "本文章主要介绍了linux中多线程编程,对于多线程同时访问临界资源产生的冲突,利用互斥锁机制解决,对于互斥锁的引入可能会产生的死锁和饥饿,针对这两个问题给出了具体的解决办法。" --- -标题:linux下的多线程的使用 - -内容:本文章主要介绍了linux中多线程编程,对于多线程同时访问临界资源产生的冲突,利用互斥锁机制解决,对于互斥锁的引入可能会产生的死锁和饥饿,给出了具体的解决办法。 - 本文章介绍的主要介绍图: ![img](img/1.png) @@ -66,15 +62,15 @@ void *add(void *) } -结果一: +实验结果一: ![img](img/2.png) -结果二: +实验结果二: ![img](img/3.png) -结果三: +实验结果三: ![img](img/4.png) @@ -284,8 +280,4 @@ Int sem_post(sem_t *sem);//信号量的V操作 4>销毁信号量 -Int sem_destroy(sem_t *sem); - - - - \ No newline at end of file +Int sem_destroy(sem_t *sem); \ No newline at end of file -- Gitee From 8e04d83db1cfd75c8062b9cf09bb0121e3c9c44b Mon Sep 17 00:00:00 2001 From: chenxiaolong <2764476004@qq.com> Date: Sat, 19 Sep 2020 22:49:00 +0800 Subject: [PATCH 3/3] a new blog thread --- content/blog/2020/Thread_cxl_3/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2020/Thread_cxl_3/index.md b/content/blog/2020/Thread_cxl_3/index.md index d4476f8..739b4e1 100644 --- a/content/blog/2020/Thread_cxl_3/index.md +++ b/content/blog/2020/Thread_cxl_3/index.md @@ -4,7 +4,7 @@ date: 2020-09-15T19:00:57+08:00 author: "陈小龙" keywords: ["linux","mutex"] categories : ["你的分类标题"] -banner : "img/blogimg/cxl_3" +banner : "img/blogimg/cxl_3.jpg" summary : "本文章主要介绍了linux中多线程编程,对于多线程同时访问临界资源产生的冲突,利用互斥锁机制解决,对于互斥锁的引入可能会产生的死锁和饥饿,针对这两个问题给出了具体的解决办法。" --- -- Gitee