2026/5/18 23:44:20
网站建设
项目流程
wordpress 主页地址,企业seo关键字优化,做壁纸网站好,成都网页制作一#xff0c;互斥1.概念#xff08;1#xff09;互斥#xff1a;在多线程中对临界资源的排他性访问。#xff08;2#xff09;临界资源#xff1a;在多线程中#xff0c;会对这个资源进行读写操作的全局变量#xff0c;文件#xff0c;设备。#xff08;3#xff…一互斥1.概念1互斥在多线程中对临界资源的排他性访问。2临界资源在多线程中会对这个资源进行读写操作的全局变量文件设备。3排他访问在多线程中只能有一个线程进行读写操作。2.用途问题th1,th2, 是两个线程是并发运行。也就是代码在运行时是穿插进行的。如果A这个指令翻译成汇编是3句(至少)。在一次线程的调度这3句汇编不一定一次性执行。也就是说可呢个th1 执行了 1,2步就切换到th2 执行。这个时候就会发生错误(数据的一致行性出现问题)。解决方案定义互斥锁 》初始化锁 》加锁 》解锁 》销毁相关函数1.定义pthread_mutex_t mutex;2.初始化锁int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *attr)功能将已经定义好的互斥锁初始化。参数mutex 要初始化的互斥锁atrr 初始化的值一般是NULL表示默认锁返回值成功 0 失败 非零3.加锁int pthread_mutex_lock(pthread_mutex_t *mutex)功能用指定的互斥锁开始加锁代码加锁后的代码到解锁部分的代码属于原子操作在加锁期间其他进程/线程都不能操作该部分代码如果该函数在执行的时候mutex已经被其他部分使用则代码阻塞。参数 mutex 用来给代码加锁的互斥锁返回值成功 0 失败 非零原子操作 在线程的一次调度中这段代码必须完成不能发生线程调度。4.解锁int pthread_mutex_unlock(pthread_mutex_t *mutex)功能将指定的互斥锁解锁。解锁之后代码不再排他访问一般加锁解锁同时出现。参数用来解锁的互斥锁返回值成功 0 失败 非零5.销毁int pthread_mutex_destroy(pthread_mutex_t *mutex)功能使用互斥锁完毕后需要销毁互斥锁参数mutex 要销毁的互斥锁返回值成功 0 失败 非零