当前位置: 首页 > 网络应用技术

Django的信号是什么(2023年最新的完成)

时间:2023-03-09 00:05:49 网络应用技术

  简介:许多朋友问有关Django大量数量的问题。首席执行官在本文中注明将为您提供详细的答案,以供所有人参考。我希望这对每个人都会有所帮助!让我们一起看看!

  信号量,有时称为信号灯,是在多线程环境中使用的设施。它可以用于确保不同时调用两个或多个关键代码段。在输入密钥代码段时,线程必须获得信号量;一旦密钥代码段完成,线程必须释放信号量。对于想要输入此关键代码段的其他线程,您必须等到第一个线程发布信号卷。为了完成此过程,Semaphore vi是需要,然后分别放置在每个关键代码段的末尾,然后将其释放信号信号信号vi放置在每个关键代码段的末尾。它被证实,信号量VI引用了初始创建的信号。

  描述

  编辑

  以停车场的运营为例。简而观看门的人允许其中三个直接进入,然后放下汽车挡住。其余的汽车必须在入口处等待。后来,汽车必须在入口处等待。这次,一辆汽车离开了停车场。看到人们学到了学历后,他打开了汽车,将其放在外面。如果您剩下两个,则可以将两个分成两分,所以它是如此。

  在此停车场系统中,停车位是公共资源。将每辆车与线程进行比较。看着门的人是信号量的角色。

  分类

  编辑

  整数信号:信号量是整数

  记录-Type信号(记录信号量):除了每个信号量的整数值S.Value(计数)外,还有一个等待队列S.L的过程,该过程是阻止信号量的过程的徽标。

  二进制信号量(二进制信号量):仅允许信号量为0或1值

  每个信号量必须至少记录两个信息:信号量和流程队列等待信号量的值。类型定义如下:( pascal语言表达式)

  信号量=记录

  价值:整数;

  队列: ^PCB;

  结尾;

  其中,PCB是一个过程控制块,它是操作系统为每个过程建立的数据结构。

  当S.值= 0时,S.Queue为空;

  在s.value0上,s.value的绝对值是等待该过程的过程的S.Queue数量。

  特征

  编辑

  摘要,信号量的特征如下:信号量是一个非负整数(停车位数)。当值为零时,所有尝试浏览的线程都将等待。我们根据信号量来定义两个操作:等待(等待)并释放。线程调用等待操作时,它要么获取资源,然后减少信号量,要么继续等待它(指在封锁队列中),直到信号大于等于该信号MONM.REEles实际上是通过信号量执行的,与车辆的停车场休假相对应。该操作被称为“发行”的原因是因为释放了信号量的资源。

  操作方法

  编辑

  信号数量有4个操作(包括emaphore):

  1.初始化,也称为creation int sem_init(sem_t *sem,int pshared,unsigned int值);

  2.等待信号(等待),否则也可以称为int sem_wait(sem_t *sem);

  3.给出信号(信号)或发送信号int sem_post(sem_t *sem);

  4.销毁int sem_destory(sem_t *sem);[1]

  创造

  编辑

  就像在系统中共享内存一样,信号数量也需要一系列专有操作功能(SEMGET,SEMCTL等)。系统命令IPC可以查看当前系统IPC的状态,并使用-s命令之后的参数。您可以使用函数SEMGET创建或获得信号集ID。功能原型如下:

  #include sys/shm.h

  int semget(key_t键,int nsems,int flag);

  该函数中的参数键用于转换为标识符,每个IPC对象都对应于键。建立新的共享内存段时,将参数标志的相应权威限制分配给IPC_PERM结构中的模式域,以及相应信号集的SHMID_DS的初始化,如表1所示。

  SHMID_DS结构初始化表

  IPC_PERM结构数据

  初始值

  IPC_PERM结构数据

  初始值

  sem_otime

  sem_nsems

  nsems

  sem_ctime

  系统当前

  参数NSEM是一个大于或等于0的值,用于指示该信号量可用的资源编号数(创建信号量时)。当现有信号集合时,参数值为0。执行,标识符(大于或等于0的整数)返回信号集。如果失败,请返回–1。函数SEMOP用于操作信号集,并且功能原型如下:

  #include sys/sem.h

  int semop(int semid,struct sembuf semoparray [],size_t nops);

  该函数中的参数半指是由Semget函数返回的信号量标识符。参数名点指示指向参数SemOparray数组数组的数组的元素数量。参数SemOparray是struct sembuf结构类型的数组指针。Sembuf结构显示要执行的操作。定义如下:

  struct sembuf {

  未签名的短sem_num;

  短sem_op;

  短sem_flg;

  }

  在Sembuf结构中,SEM_NUM是集中在相应信号量中的资源,因此其值是从0到相应的信号卷集的资源总数(ipc_perm.sem_nsems)之间的整数。SEM_OP指示要执行的操作,SEM_FLG,SEM_FLG说明函数SEMOP的行为。SEM_OP的值是整数,如表2所示,列出了详细的SEM_OP和相应操作的值。

  SEM_OP值详细说明

  SEM_OP

  操作

  一个正数

  释放相应数量的资源,将SEM_OP的值添加到信号数量的值中

  该过程块直到信号的相应值为0,并且信号为0时,函数立即返回。如果信号的值不是0,则根据SEM_FLG.SEM_FLG的IPC_NOWAIT位确定函数动作。指定ipc_nowait,然后semop函数是错误的,返回eagain.sem_flg未指定ipc_nowait,然后添加信号量的semncnt值的1个,然后悬挂该过程直到发生情况。信号数量值为0,值为0,值为0,信号量的SEMZCNT减少1,并成功返回函数SEMOP;信号量已删除(仅超级用户或用户流程的创建具有此权限),并且函数ISP返回到EIDRM的错误;该过程捕获信号,并捕获信号,并捕获信号,并从信号处理函数中返回。在这种情况下,将此信号量的semncnt值降低1,函数semop误差返回eintr

  负数

  请求SEM_OP的绝对值。如果相应的资源编号可以满足请求,则信号量的值降低到SEM_OP的绝对值,并成功返回函数。当相应的资源无法满足请求时,此操作与sem_flg.sem_flg有关指定ipc_nowait,然后semop函数是错误的,返回eagain.sem_flg未指定ipc_nowait,然后添加信号量的semncnt值的1个,然后挂起该过程,然后挂起以下情况:何时发生相应的情况。资源可以满足该请求,信号的值将减少到sem_op.successcessly返回的绝对值;删除此信号(仅超级用户或使用此权限创建用户进程),功能smeop错误返回到EIDRM:该过程捕获信号并从信号处理功能返回。在这种情况下,减少此信号量的SEMNCNT值1。功能SEMOP错误返回到EINTR

  基本过程

  编辑

  以下示例演示了信号操作的基本过程。在程序中,SEMGET函数用于创建信号数量集,并使用SEMOP函数在此信号集上执行资源释放操作。并使用命令查看Shell中系统IPC的状态。

  (1)在VI编辑器中编辑程序。

  程序列表14-10 create_sem.c使用Semget函数创建信号

  #include sys/types.h

  #include sys/ipc.h

  #include sys/sem.h

  #include stdio.h

  #include stdlib.h

  int main(void)

  {{{

  int sem_id;

  int nsems = 1;

  int标志= 0666;

  struct sembuf buf;

  sem_id = semget(ipc_private,nsems,flags);/*创建一个新信号集* /

  如果(sem_id 0){

  Perror(“ Semget”);

  出口(1);

  }

  /*输出测量标签的相应信号数量集*/

  printf(“成功创建了信号量:%d

  ”,sem_id);

  buf.sem_num = 0;/*定义信号量操作* /

  buf.sem_op = 1;/*执行资源操作的发布* /

  buf.sem_flg = ipc_nowait;/*定义SEMOP函数的行为* /

  if(semop(sem_id,buf,nsems))0){ /*执行操作* /

  Perror(“ Semop”);

  出口(1);

  }

  系统(“ IPCS -S”);/*查看系统IPC状态* /

  出口(0);

  }

  (2)该程序在VMware中编译如下:

  gcc -o a.o testc_semaphore.c

  (3)程序在外壳中运行如下:

  https://www.shouxicto.com/article/a3.o

  成功创建了信号量:0

  ------信号阵列--------------------

  关键的半主珀姆斯NSEMS

  0x00000000 0 ZCR 666 1

  在上面的程序中,使用Semget函数创建了一个信号数量集来定义信号卷集的资源数为1。接下来,SEMOP函数用于资源发布操作。使用Shell命令IPC检查状态程序末尾的系统IPC。

  %注意:命令IPCS参数-s标识查看系统IPC的信号集状态。

  希望帮助您,并满意地看待它。

  当您需要在框架的不同位置之间传递信息时使用。例如,当在此处完成作业时,您可以在需要提醒另一面时使用它。在事物中构建优势。您不必担心太多。您可以直接使用它。缺点是该功能不够强,并且存在许多局限性。

  有关更多内容,请参阅Liu Jiang的Django教程

  信号量在此过程中的过程中进行了传达。该线程用未知信号通信。由于线程Linux尚未意识到该过程之间的通信,因此SEM_INIT的第二个参数为0,在多线程线程中,性交之间的同步可以通过著名的信号量或未知信号,但是同步可以通过线程通常是未命名的信号。结构结构IPC_IDS存储与内核连续,系统已关闭,并删除了信号量。当然,也可以显示。

  消息队列,信号量,内存共享,它们是相同的原理。只是将信号分为名称和未知

  信号灯符号光,该程序是一个非负整数,表明状态。

  可以用于保护两个或多个关键代码段,这些关键代码段无法同时调用。在输入密钥代码段时,线程必须获得信号量。如果密钥代码段中没有线程,则线程将立即输入框架图的一部分。一旦密钥代码段完成,该线程必须释放信号量。对于想要输入此密码段的其他线程,您必须等到第一个线程释放信号卷。完成此过程,您需要创建一个信号量,然后分别将获取信号量和释放信号量放置在每个关键代码段的末尾。它已确认信号量参考是最初创建的信号。

  结论:以上是首席CTO注释为每个人编写的Django信号的全部内容。感谢您花时间阅读此网站。我希望这对您有帮助。有关Django中的信号的更多信息,请不要忘记在此站点上找到它。