当前位置: 首页 > news >正文

网上网站建设教程今天重大新闻头条新闻国际新闻

网上网站建设教程,今天重大新闻头条新闻国际新闻,商标设计用什么软件,万金娱乐网站开发互斥 概念 互斥#xff1a;在多线程中对临界资源(公共资源)的排他性访问。 互斥机制 互斥锁 保证临界资源的访问控制。 通过使用互斥锁#xff0c;可以确保某一时刻只有一个线程能够访问临界资源#xff0c;从而避免竞争条件#xff08;race condition…互斥 概念 互斥在多线程中对临界资源(公共资源)的排他性访问。 互斥机制 互斥锁  保证临界资源的访问控制。 通过使用互斥锁可以确保某一时刻只有一个线程能够访问临界资源从而避免竞争条件race conditions的发生 pthread_mutex_t   mutex; 互斥锁类型        互斥锁变量 内核对象 框架  定义互斥锁 初始化锁 加锁 解锁 销毁 ****                                        ***      *** 定义 pthread_mutex_t   mutex; 定义变量一般定义为全局变量 初始化锁 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr); 功能 将已经定义好的互斥锁初始化。 参数 mutex 要初始化的互斥锁 atrr  初始化的值一般是NULL表示默认锁 返回值 成功 0        失败 非零 加锁 int pthread_mutex_lock(pthread_mutex_t *mutex); 功能 用指定的互斥锁开始加锁代码 加锁后的代码到解锁部分的代码属于原子操作最小操作、不可再分割的操作 在加锁期间其他进程/线程都不能操作该部分代码这部分代码应该尽可能短 如果该函数在执行的时候mutex已经被其他部分使用则代码阻塞。 参数 mutex 用来给代码加锁的互斥锁 返回值 成功 0        失败 非零 加锁时机 访问共享资源时 在任何线程需要读写共享资源如全局变量、共享数据结构、文件等之前应该先上锁。这样可以防止其他线程同时访问这个资源导致数据竞争或不一致的问题。 例如在一个银行账户系统中多个线程同时更新账户余额时应在修改余额之前锁定。 进入临界区时 临界区是指代码中可能被多个线程并发访问且访问时需要互斥的部分。临界区通常是需要同步的代码块在进入临界区前应上锁。 例如在生产者-消费者模型中生产者和消费者访问同一个缓冲区时需要在进入缓冲区的操作代码之前上锁。 检查或修改共享状态时 如果线程需要检查或修改某个共享状态如队列的长度、任务的状态等应该在检查或修改之前上锁以确保其他线程不会在中间更改状态。 例如在线程池中当线程检查是否有任务可用时应先上锁以确保状态一致 解锁 int pthread_mutex_unlock(pthread_mutex_t *mutex); 功能 将指定的互斥锁解锁。 解锁之后代码不再排他访问一般加锁解锁同时出现。 参数 用来解锁的互斥锁 返回值 成功 0        失败 非零 解锁时机 离开临界区时 当线程完成了对共享资源的访问或完成了临界区的操作应立即解锁。这样其他等待的线程可以获取锁并继续执行避免死锁或资源饥饿。 例如在修改完共享数据之后线程应立即解锁以释放互斥锁让其他线程可以访问共享数据。 操作完成时 如果锁是为了保护某个操作的原子性即操作不可分割那么在操作完成后应解锁。 例如如果线程锁定了一个文件进行读写操作在操作完成后应解锁以便其他线程可以访问文件。 上锁在访问共享资源、进入临界区、或检查/修改共享状态之前上锁解锁在离开临界区、操作完成后立即解锁 销毁 int pthread_mutex_destroy(pthread_mutex_t *mutex); 功能 使用互斥锁完毕后需要销毁互斥锁 参数 mutex 要销毁的互斥锁 返回值 成功  0        失败  非零   trylock int pthread_mutex_trylock(pthread_mutex_t *mutex);功能 类似加锁函数效果唯一区别就是不阻塞 参数 mutex 用来加锁的互斥锁 返回值 成功 0        失败 非零 当锁已经被占用时通常返回 E_AGAIN 同步 线程的同步  同步 有一定先后顺序的对资源的排他性访问。 同步产生原因互斥锁可以控制排他访问但没有次序。 linux下的线程同步 信号量机制 semaphore.h   posix  sem_open(); 信号量的分类 1、无名信号量 ——线程间通信 2、有名信号量 ——进程间通信 框架 信号量的定义信号量的初始化 信号量的PV操作信号量的销毁   信号量的定义  semaphore  sem_t            sem; 信号量的类型     信号量的变量 信号量的初始化 int sem_init(sem_t *sem, int pshared, unsigned int value); 功能 将已经定义好的信号量赋值。 参数 sem 要初始化的信号量 pshared  0 ;表示线程间使用信号量              !0 ;表示进程间使用信号量 value 信号量的初始值一般无名信号量           都是二值信号量0 1            0 表示红灯进程暂停阻塞           1 表示绿灯进程可以通过执行 返回值成功  0        失败  -1 信号量的PV 操作 P :申请资源——申请一个二值信号量 0or1 V :释放资源——释放一个二值信号量 P操作对应函数 sem_wait(); V操作对应函数 sem_post();   sem_wait() int sem_wait(sem_t *sem); 功能 判断当前sem信号量是否有资源可用。   如果sem有资源(1)则申请该资源程序继续运行   如果sem没有资源(0)则线程阻塞等待一 旦有资源   则自动申请资源并继续运行程序。   注意sem 申请资源后会自动执行 sem  sem - 1;可用作计数信号量 参数 sem 要判断的信号量资源 返回值 成功 0         失败 -1 sem_post() int sem_post(sem_t *sem); 功能 函数可以将指定的sem信号量资源释放   并默认执行sem  sem1;   线程在该函数上不会阻塞。 参数 sem 要释放资源的信号量 返回值 成功 0        失败 -1 信号量的销毁 int sem_destroy(sem_t *sem); 功能 使用完毕将指定的信号量销毁 参数 sem要销毁的信号量 返回值 死锁的产生 产生死锁的原因 主要是 1 因为系统资源不足。 2 进程运行推进的顺序不合适。 3 资源分配不当等。 如果系统资源充足进程的资源请求都能够得到满足死锁出现的可能性就很低否则 就会因争夺有限的资源而陷入死锁。其次进程运行推进顺序与速度不同也可能产生死锁。 产生死锁的四个必要条件 1 互斥条件一个资源每次只能被一个进程线程使用。 2 请求与保持条件一个进程因请求资源而阻塞时对已获得的资源保持不放。 3 不剥夺条件进程已获得的资源在末使用完之前不能强行剥夺。 4 循环等待条件若干进程之间形成一种头尾相接的循环等待资源关系。
http://www.w-s-a.com/news/803851/

相关文章:

  • 网站友情链接购买天元建设集团有限公司资质
  • 南山商城网站建设哪家技术好株洲seo网站优化软件
  • 服务类网站建设18款禁用网站app直播
  • 电子商务网站建设需要物流网站开发公司
  • 网站的系统建设方式有哪些内容宁波网站建设公司
  • 网站开发 技术方案品牌建设总要求
  • 中卫网站建站设计seo专员的工作内容
  • h5商城网站是什么意思.net 网站开发框架
  • 西安网站改版的公司软件外包是什么意思
  • 网站建设了解眉山网站优化
  • 做网站用php还是node如何申请网站域名流程
  • 销售公司怎么做网站删除wordpress
  • 毕节网站怎么做seohtml代码特效银河系
  • 淄博品质网站建设网站引导页案例
  • 网站建设虚拟空间小豹子韬韬是哪个网站做的
  • 网络司网站如何建立公司网站建议和规则
  • 织梦网站模板后台密码找回企业vi设计公司性价比高
  • php 爬取网站所有链接传奇手游发布网站
  • 免费软文网站wordpress中文名注册
  • 企业网站建设研究目的意义怎样设计一个公司网站
  • 怎么架构网站便民信息发布平台
  • 网站 建设 现状网站推广合同需要缴纳印花税吗
  • 熊猫头表情包制作网站wordpress 缺省目录
  • 网站浏览图片怎么做的群晖wordpress升级5.0
  • 25个优秀个人网站设计模板网站建设定位分析论文
  • 在线网站备案站长seo综合查询工具
  • 网站根 html网站建设行业数据
  • 网站公司做的网站有最字设计说明室内设计
  • 在线网站代码生成我想做个百度网站怎么做
  • 网站的建设费用分为长治市建设厅官方网站