CreateSemaphore函数

2023-05-16

创建或打开命名或未命名的信号量对象。

要指定对象的访问掩码,请使用CreateSemaphoreEx函数。

语法

HANDLE WINAPI CreateSemaphore(
  _In_opt_ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
  _In_ LONG lInitialCount,
  _In_ LONG lMaximumCount,
  _In_opt_ LPCTSTR lpName
);


参数
lpSemaphoreAttributes [in,optional]
指向SECURITY_ATTRIBUTES结构的指针。如果此参数为NULL,则子进程无法继承句柄。

结构的lpSecurityDescriptor成员为新信号量指定安全描述符。如果此参数为NULL,则信号量将获取默认安全描述符。信号量的默认安全描述符中的ACL来自创建者的主要或模拟令牌。

lInitialCount [in]
信号量对象的初始计数。该值必须大于或等于零且小于或等于lMaximumCount。信号量的状态在其计数大于零时发出信号,在信号为零时发出信号。只要wait函数释放等待信号量的线程,计数就会减1。通过调用ReleaseSemaphore函数将计数增加指定的量。

lMaximumCount [in]
信号量对象的最大计数。该值必须大于零。

lpName [in,optional]
信号量对象的名称。名称仅限于MAX_PATH个字符。名称比较区分大小写。

如果lpName与现有命名信号量对象的名称匹配,则此函数请求SEMAPHORE_ALL_ACCESS访问权限。在这种情况下,lInitialCount和lMaximumCount参数将被忽略,因为它们已由创建过程设置。如果lpSemaphoreAttributes参数不为NULL,则确定是否可以继承句柄,但忽略其安全描述符成员。

如果lpName为NULL,则创建没有名称的信号量对象。

如果lpName与现有事件,mutex,waitable计时器,作业或文件映射对象的名称匹配,则函数将失败,GetLastError函数将返回ERROR_INVALID_HANDLE。这是因为这些对象共享相同的命名空间。

该名称可以具有“Global”或“Local”前缀,以在全局或会话命名空间中显式创建对象。名称的其余部分可以包含除反斜杠字符(\)之外的任何字符。有关更多信息,请参阅内核对象命名空间。使用终端服务会话实现快速用户切换。内核对象名称必须遵循为终端服务概述的准则,以便应用程序可以支持多个用户。

可以在私有名称空间中创建对象。有关更多信息,请参阅对象命名空间。

返回值
如果函数成功,则返回值是信号量对象的句柄。如果在函数调用之前存在命名的信号量对象,则该函数返回现有对象的句柄,GetLastError返回ERROR_ALREADY_EXISTS。

如果函数失败,则返回值为NULL。要获取扩展错误信息,请调用GetLastError。

备注
CreateSemaphore返回的句柄具有SEMAPHORE_ALL_ACCESS访问权限;它可以在任何需要信号量对象句柄的函数中使用,前提是调用者已被授予访问权限。如果从服务或模拟其他用户的线程创建信号量,则可以在创建信号量时将安全描述符应用于信号量,或者通过更改其默认DACL来更改创建过程的默认安全描述符。有关更多信息,请参阅同步对象安全性和访问权限。

信号量对象的状态在其计数大于零时发出信号,并在其计数等于零时发出信号。 lInitialCount参数指定初始计数。计数永远不会小于零或大于lMaximumCount参数中指定的值。

调用进程的任何线程都可以在调用其中一个等待函数时指定信号量对象句柄。当指示对象的状态发出信号时,单对象等待函数返回。可以指示多对象等待函数在任何一个或所有指定对象发出信号时返回。当wait函数返回时,释放等待线程以继续执行。每次线程完成等待信号量对象的等待时,信号量对象的计数减1。线程完成后,它会调用ReleaseSemaphore函数,该函数会增加信号量对象的计数。

多个进程可以具有相同信号量对象的句柄,从而可以使用该对象进行进程间同步。可以使用以下对象共享机制:

由CreateProcess函数创建的子进程可以继承
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CreateSemaphore函数 的相关文章

  • Nginx配置禁止IP访问

    时间背景 使用Nginx代理服务 xff0c 请求先到前端的代理服务器 xff0c 然后由代理服务器的nginx转发请求到后端的服务器 开始默认没有对IP访问做限制 xff0c 现在要求禁止IP访问 xff0c 大概是一个这样的架构 xff
  • git如何使用tag

    简介 我们可以创建一个tag来指向软件开发中的一个关键时期 xff0c 比如版本号更新的时候可以建一个 v2 0 v3 1 之类的标签 xff0c 这样在以后回顾的时候会比较方便 tag的使用很简单 xff0c 主要操作有 xff1a 查看
  • linux服务器最大支持连接数

    当我们被问到一台linux服务器最多可以支持多少连接时 xff0c 很多人第一反应是65535个 xff0c 因为端口是65535个 xff0c 还有人说受到TCP连接里四元组的空间大小限制 xff0c 那么到底是多少 xff1f 首先解释
  • Linux提示空间已满,找不到大文件

    当我们发现磁盘快满了 xff0c 然后删除某些服务的日志文件 xff0c 删除后发现磁盘空间仍然被占用 xff0c 但我们使用 du sh 命令 xff0c 发现目录下没有大文件 xff0c 这时我们应该考虑 xff0c 删除日志文件时 x
  • passwd修改用户密码报错

    故障现象 xff1a 1 修改密码时报错 passwd Authentication token manipulation error 2 添加用户报错 xff1a unable to lock password file 分析问题 xff
  • /etc/bashrc、/etc/profile、.bashrc、.bash_profile这几个文件的关系是什么呢?

    我们平时在配置一些环境变量的时候 xff0c 经常会遇到这几个文件的修改 xff0c 有的文档是修改 etc bashrc xff0c 而有的文档则是要求修改 bashrc xff0c 那么这几个文件到底有什么关系呢 xff1f 首先说一下
  • RouterOS系统安装和简单配置

    1 安装RouterOS系统 VMware虚拟机 xff0c 新建一个其他系统的虚拟机 xff0c 类似安装Linux系统 xff0c 挂载系统镜像 xff0c 根据提示一步步完成安装 选择安装的功能包 选择安装的功能包后 xff0c pr
  • nginx-upload-module模块使用

    Nginx是没有该模块的 xff0c 需要重新编译Nginx xff0c 添加nginx upload module模块 下载nginx upload module模块 xff1a https github com fdintino ngi
  • SecureCRT Mac版安装并激活

    先下载SecureCRT和破解文件 默认下载到了当前用户的 下载 目录中 在 Finder 中 打开 scrt 7 3 0 657 osx x64 dmg 并将 SecureCRT复制到 应用程序 中 这时SecureCRT的路径是 App
  • Python 报错 | 导入celery模块报错

    环境 xff1a Python3 7 celery4 1 0 进入python交互环境 xff0c 导入celery模块正常 xff0c 引用Celery的方法报错 xff1a liangkai vm span class token pu
  • yy欢聚时代软件测试笔试题

    1 xff0c 10111001对应的八进制 xff0c 十六进制和十进制 2 xff0c 常见的数据库有那些 xff1f 3 xff0c 常见的协议有哪些 xff1f 4 xff0c 代码运行结果 xff0c c 43 43 题目 xff
  • linux之conntrack连接跟踪

    linux之conntrack连接跟踪 conntrack连接跟踪 连接跟踪 xff08 CONNTRACK xff09 xff0c 顾名思义 xff0c 就是跟踪并且记录连接状态 Linux为每一个经过网络堆栈的数据包 xff0c 生成一
  • mdk arm开启FPU报错问题

    问题描述 xff1a mdk使用arm complier v6 开启FPU报错问题 问题分析 xff1a 如果是使用arm v5版本编译器 xff0c 按照下述步骤进行配置 xff0c 然后编译是没有问题的 xff1a 在C C 43 43
  • linux之yum下载rpm包离线安装conntrack-tools

    如何下载rpm包 xff0c 进行离线安装 文章目录 前言一 yum下载rpm包离线安装方式方法一 使用yum 的 downloadonly 插件下载方法二 使用yumdownloader下载方法三 使用repotrack下载所有依赖 二
  • docker离线安装方法

    docker离线安装方法 下载地址 xff1a https download docker com linux static stable x86 64 参考文档 xff1a https docs docker com engine ins
  • Linux使用chrony让局域网内的服务器时间同步

    Linux使用chrony让局域网内的服务器时间同步 在生产环境经常会因为时间的问题出现过问题 xff0c 例如应用节点和数据存节点时间不一致 xff0c 造成检索不到数据的问题等 在现在不管是公有云 私有云还是混合云等在建设过程中 xff

随机推荐

  • linux将本地库JAR批量导入到Nexus3.x

    linux将本地库JAR批量导入到Nexus3 x 文章目录 linux将本地库JAR批量导入到Nexus3 x1 问题描述2 搭建Nexus私服2 1 官网下载 xff1a 2 2 上传并解压2 3 修改默认端口2 4 修改内存分配 xf
  • 如何下载npm离线安装包

    如何下载npm离线安装包 如何将本地nodejs库 xff0c 放入到nexus的npm库 在代码工程目录使用 npm install 安装 package json 所依赖的文件 xff0c 并依赖下载到 node modules 目录
  • 批量下载npm离线安装包

    批量下载npm离线安装包 上篇讲到如何下载npm离线安装包的几种思路 https blog csdn net xinle0320 article details 124285708 1 批量下载npm离线安装包 三种方式 通过 packag
  • Fiddler抓取Java应用HTTP请求报文

    Fiddler抓取Java应用HTTP请求报文 1 监听Tomcat的http请求报文 在catalina bat添加一行 xff08 proxyPort的值为fiddler端口号 xff09 span class token builti
  • NPM软件包发布到Nexus

    NPM软件包发布到Nexus 文章目录 1 Linux安装nodejs环境2 创建镜像仓库3 添加nexus权限4 设置镜像仓库地址5 发布单个包6 发布tgz包7 批量发布npm包到私有仓库8 查看nexus的npm仓库9 测试 1 Li
  • docker安装minio

    docker安装minio 1 拉取镜像2 查看镜像3 创建目录4 指定控制台端口启动4 查看日志5 登录控制台页面6 Create Bucket7 浏览文件 1 拉取镜像 span class token function docker
  • docker minio设置永久免密下载链接

    docker minio设置永久免密下载链接 上篇 docker安装minio 前言 minio分享文件的链接 xff0c 最多支持分享七天 通过minio client管理存储桶策略的方式实现文件链接永久有效 这样就可以免密搭建个人图片等
  • printf重定向的相关总结

    简介 实现printf重定向有多种方式 xff0c 下面一一介绍 linux环境下 虽然linux系统的默认标准输出设备是显示器 xff0c 但是我们可以把printf打印输出的内容重定向到其他设备或文件 方法如下 xff1a 方法1 xf
  • 安装ES7.x集群

    安装ES集群 文章目录 安装ES集群一 环境准备1 1 准备三台Linux主机1 2 ES集群环境规划1 3 修改 etc hosts 二 下载部署包2 1下载jdk部署包2 2下载ES相关部署包 三 环境安装3 1安装JDK8环境3 1
  • es7.x升级log4j版本

    es7 x升级log4j版本 下载log4j2 18 0 下载地址 xff1a https dlcdn apache org logging log4j 2 18 0 apache log4j 2 18 0 bin tar gz 其他版本
  • 使用logstash迁移ES1.x数据到ES7.x

    使用logstash迁移ES1 x数据到ES7 x tar span class token operator span zxvf logstash span class token operator span span class tok
  • ES创建索引模板设置分片和副本数及时间格式问题

    创建索引模板设置分片和副本及时间格式问题 一 创建索引模板 PUT template event template default span class token punctuation span span class token str
  • es7 扩展词库

    elasticsearch 7 x x 扩展ik分词词库 支持mysql 热部署 https blog csdn net laow1314 article details 124236262 Elasticsearch 7 X Ik源码解读
  • es相关参数优化

    es相关参数优化 生产环境 jvm参数资源可以调整大一些 xff0c 系统的内存的一半给ES服务 xff0c 最大不超过32G xff0c 剩下的资源留给底层Lucene缓冲 xff1b 独立部署ES服务 xff0c 可以使用64G内存的节
  • ROS中rqt_graph报错节点图空白问题

    ROS中rqt graph报错节点图空白问题 我的环境配置 xff1a 1 VM ware虚拟机安装的ubuntu系统20 04 2 ROS版本是noetic 问题如下 xff1a 最近在学习ROS过程中遇到了rqt graph报错的问题
  • ROS中Gazebo无响应解决办法

    标题ROS中Gazebo无响应解决办法 在终端输入gazebo没有反映 xff0c 进行下面两句操作 首先输入下面的代码 gazebo span class token operator span verbose 观察到报错显示原因为有另一
  • 快速平方根倒数算法深度理解

    快速平方根倒数算法深度理解 快速平方根倒数算法是什么 xff1f 简单来说这个算法避开了开方和除法运算快速实现了 y 61 1 x
  • Ubuntu 14.04安装openwrt

    OpenWRT 编译环境搭建 配置编译环境 必须使用非root用户 xff0c ArchLinux需要创建新用户 安装依赖包 Ubuntu 14 04 必选 apt get install asciidoc bash bc binutils
  • MDK debug时出现*** error 65: access violation at

    简介 本文针对的是访问内存权限的问题 xff0c 其他问题暂时不讨论 问题描述 使用mdk arm调试keil工程的时候遇到错误 error 65 access violation at 0xE0042004 no write permis
  • CreateSemaphore函数

    创建或打开命名或未命名的信号量对象 要指定对象的访问掩码 xff0c 请使用CreateSemaphoreEx函数 语法 HANDLE WINAPI CreateSemaphore xff08 In opt LPSECURITY ATTRI