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

响应式网站开发费用百度手机网页版入口

响应式网站开发费用,百度手机网页版入口,网站建设推广人员,上海网站建设过程线程控制中互斥与同步: 概念: 互斥 》在多线程中对临界资源的排他性访问。 互斥机制 》互斥锁 》保证临界资源的访问控制。 Linux中的互斥锁 互斥锁(Mutex)是Linux中用于线程同步的基本机制,确保同一时间只有一个线…

线程控制中互斥与同步:

概念:
互斥 ===》在多线程中对临界资源的排他性访问。
互斥机制 ===》互斥锁  ===》保证临界资源的访问控制。

Linux中的互斥锁

互斥锁(Mutex)是Linux中用于线程同步的基本机制,确保同一时间只有一个线程能访问共享资源。以下是Linux中互斥锁的使用方法和关键概念。

框架:
 定义互斥锁 ==》初始化锁 ==》加锁 ==》解锁 ==》销毁

互斥锁的初始化

在Linux中,互斥锁通过pthread_mutex_t类型表示。初始化方式分为静态初始化和动态初始化。

  • 静态初始化:直接使用宏PTHREAD_MUTEX_INITIALIZER
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

  • 动态初始化:通过pthread_mutex_init函数完成。
pthread_mutex_t mutex;
pthread_mutex_init(&mutex, NULL);

互斥锁的加锁与解锁
  • 加锁:使用pthread_mutex_lock函数,如果锁已被占用,线程会阻塞。用指定的互斥锁开始加锁代码,加锁后的代码到解锁部分的代码属于原子操作,在加锁期间其他进程/线程都不能操作该部分代码, 如果该函数在执行的时候,mutex已经被其他部分使用则代码阻塞。
pthread_mutex_lock(&mutex);
// 临界区代码
  • 非阻塞加锁:使用pthread_mutex_trylock,如果锁不可用,函数立即返回错误。
if (pthread_mutex_trylock(&mutex) == 0) {// 临界区代码
}
  • 解锁:使用pthread_mutex_unlock函数。将指定的互斥锁解锁。
      解锁之后代码不再排他访问,一般加锁解锁同时出现。
pthread_mutex_unlock(&mutex);

互斥锁的销毁

使用pthread_mutex_destroy函数释放互斥锁资源。

pthread_mutex_destroy(&mutex);

死锁的产生原因和产生的必要条件:

产生死锁的原因主要是:
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程和线程之间形成一种头尾相接的循环等待资源关系。

线程同步的概念

线程同步是指在多线程环境中,通过特定机制协调线程的执行顺序,避免因并发访问共享资源导致的数据不一致或竞态条件。常见的同步机制包括互斥锁、信号量、条件变量等。

信号量概述

信号量(Semaphore)是Linux中用于进程或线程间同步的机制,由E.W. Dijkstra提出。它本质上是一个计数器,用于控制对共享资源的访问。信号量分为:

  • 二进制信号量:取值为0或1,类似互斥锁。
  • 计数信号量:取值为非负整数,用于限制资源数量。

sem_init函数概述

sem_init是Linux系统中用于初始化未命名信号量的函数,属于POSIX信号量 API(<semaphore.h>)。它常用于多线程或多进程间的同步控制,通过计数器机制管理资源访问。

函数原型

#include <semaphore.h>
int sem_init(sem_t *sem, int pshared, unsigned int value);

  • sem: 指向待初始化的信号量对象的指针。
  • pshared: 指定信号量的共享范围:
    • 0:信号量在线程间共享(同一进程内)。
    • 0:信号量在进程间共享(需放在共享内存中)。
  • value: 信号量的初始计数值(通常表示资源可用数量)。value 信号量的初始值,一般无名信号量, 都是二值信号量。
      0 表示红灯,进程暂停阻塞
      1 表示绿灯,进程可以通过执行

返回值

  • 成功:返回0
  • 失败:返回-1并设置errno(如EINVAL无效参数、ENOSPC资源耗尽)。

sem_t函数基本概念

sem_t 是一个不透明的结构体类型,通常通过指针操作。它分为两种类型:

  • 无名信号量:用于线程间同步,存储在共享内存中。
  • 有名信号量:用于进程间同步,通过文件系统路径名标识。

常用函数

以下是与 sem_t 相关的主要函数:

初始化信号量
int sem_init(sem_t *sem, int pshared, unsigned int value);
  • pshared0 表示线程间共享,非零表示进程间共享。
  • value:信号量初始值。
销毁信号量
int sem_destroy(sem_t *sem);
  • 仅用于无名信号量。

sem_wait 概述

sem_wait 是 Linux 系统中用于操作信号量(semaphore)的系统调用之一,属于 POSIX 线程(pthread)库的一部分。它的主要功能是尝试减少信号量的值,如果信号量的值大于零,则减一并立即返回;如果值为零,则调用线程会被阻塞,直到信号量的值变为非零。

功能:

判断当前sem信号量是否有资源可用。
  如果sem有资源(==1),则申请该资源,程序继续运行
  如果sem没有资源(==0),则线程阻塞等待,一 旦有资源
  则自动申请资源并继续运行程序。

  注意:sem 申请资源后会自动执行 sem = sem - 1;
参数:sem 要判断的信号量资源

函数原型

#include <semaphore.h>
int sem_wait(sem_t *sem);
  • 参数sem 是指向信号量对象的指针。
  • 返回值:成功时返回 0,失败时返回 -1 并设置 errno

使用场景

sem_wait 通常用于线程或进程间的同步,确保对共享资源的互斥访问。常见场景包括:

  • 控制临界区的进入(如共享内存、文件操作)。
  • 实现生产者-消费者模型中的资源计数。
阻塞等待(P操作)

P ===》申请资源===》申请一个二值信号量 

int sem_wait(sem_t *sem);
  • 若信号量值为0,则阻塞直到值变为正。
发布(V操作)

 V ===》释放资源===》释放一个二值信号量

int sem_post(sem_t *sem);
  • 增加信号量值,唤醒等待线程。
获取当前值
int sem_getvalue(sem_t *sem, int *sval);
  • 将当前值存入sval(可能因并发不准确)。

注意事项

  1. 进程间共享:需将信号量放在共享内存中,或使用有名信号量(如sem_open)。
  2. 错误处理:所有函数返回-1时表示错误,需检查errno
  3. 资源释放:确保销毁信号量以避免内存泄漏。

计数信号量:计数信号量是一种同步机制,用于控制多个线程或进程对共享资源的访问。与二进制信号量(仅0或1)不同,计数信号量允许一个整数值,表示可用资源的数量。

http://www.dtcms.com/wzjs/322445.html

相关文章:

  • 什么是广告艺术设计seo的工具有哪些
  • 天天做网站怎么把抖音关键词做上去
  • 做网站商城要注册什么公司互联网行业最新资讯
  • 大连建设网站制作实时疫情最新消息数据
  • 数据库网站 建设搜索引擎优化的例子
  • 做网赚的网站网络营销推广的概念
  • 桂城网站建设制作玄幻小说排行榜百度风云榜
  • 网站空间美国定制网站建设电话
  • 手机上怎么制作网站吗关键词优化公司推荐
  • 企业网站建设市场分析百度高级搜索网址
  • 成都网站建设专家网站关键词全国各地的排名情况
  • 上海网站建设学校seo博客网址
  • 网站ui设计用什么软件做怎么制作一个网站5个网页
  • 网站网站建设设计公司线上平台怎么推广
  • 专线可以做网站如何优化关键词提升相关度
  • 网站权重是什么长沙网站seo分析
  • 珠海做网站专业公司如何写好软文推广
  • asp网站关键词重庆网站推广软件
  • 微信公众平台怎么做微网站吗成都网站排名 生客seo
  • 教做湘菜的视频网站镇江网站关键字优化
  • 昆明做网站方案推广网络推广平台
  • 36氪网站用什么程序做的百度服务中心电话
  • 政府网站建立单位免费的网络推广渠道
  • 建网站的方法百度百度一下百度
  • 做网站服务器要用多大直销的八大课程
  • 中国建设银行属于什么类型网站百度指数查询
  • 长沙大的建网站公司推广产品的文案
  • 网站开发工具有asp西安网站建设公司
  • 网站优化教程百度推广方案怎么写
  • 自学做网站需要学会哪些兰州seo网站建设