首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >信号量值初始化为-1?

信号量值初始化为-1?
EN

Stack Overflow用户
提问于 2015-03-13 15:15:58
回答 2查看 1.2K关注 0票数 1

我正在尝试为一些共享内存初始化一个二进制信号量。我不知道为什么我挂在一个信号量得到信号量,并最终发现信号量值是-1,我被困在等待。我不明白的是为什么信号量值开始初始化为-1。任何帮助澄清这一点将不胜感激。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
semID = semget(IPC_PRIVATE, 1, S_IRUSR | S_IWUSR); // create sem
int semval = semctl(semID, 1,GETVAL);

printf("After init Semaphore value = %d \n", semval);
printf("sem ID = %d \n", semID);

产出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 After init semaphore value = -1 
 sem ID = 524304 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-13 15:30:37

你有两个虫子。第一个错误是,和C中一样,semget创建的信号量数组是0索引的;因此,如果您只创建一个信号量,那么使用该semidsemctl的第二个参数应该是0,而不是1。从semctl返回的-1不是信号量的值,而是一个错误指示(您应该找到errno == EINVAL)。

你的第二个bug更微妙。semget说:

创造的时候..。

  • 与集合中的每个信号量关联的数据结构不需要初始化。可以使用带有命令SETVALSETALLSETVAL函数来初始化每个信号量。

(强调我的意思)这意味着,您的代码在第一次创建时不能依赖具有任何特定值的新SysV信号量。你必须这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
semID = semget(IPC_PRIVATE, 1, S_IRUSR|S_IWUSR);
if (semID < 0) {
    perror("semget");
    return -1;
}

union semun arg;
arg.val = 0;
if (semctl(semID, 0, SETVAL, arg) == -1) {
    perror("semctl");
    return -1;
}

// only now is it safe to use the semaphore

请注意,您必须将union semun的定义从文档中复制到代码中;它不是由任何头提供的。

如果您开始感觉这个API很糟糕,那么您就完全正确了。您可能会发现semaphore.h API更合适,但是它不太普遍。

票数 4
EN

Stack Overflow用户

发布于 2015-03-13 15:27:56

实际上,分号手册页告诉您返回值为-1意味着出现了错误。

若要获取错误,请使用曲度误差 printf( "%s", strerror(errno) );

别忘了#include <errno.h>#include <string.h>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29043477

复制
相关文章
字符数组初始化为空
第(1)(2)(5)种方式是整体清0了整个缓冲区,效率较低; 如果数组的size非常大,那么这三种方式将会造成很大的开销。
全栈程序员站长
2022/09/09
1.3K0
深度神经网络权值初始化的几种方式及为什么不能初始化为零(1)
写在前面:该篇文章的内容以及相关代码(代码在最后),都是我亲自手敲出来的,相关结论分析也是花了挺长时间做出来的,如需转载该文章,请务必先联系我,在后台留言即可。
用户7699929
2020/08/27
2.4K0
工程师将大脑信号直接转化为语音
通过监测一个人的大脑活动,这项技术可以以前所未有的清晰度重建一个人听到的单词。这一突破利用了语音合成器和人工智能的力量,可能会带来计算机直接与大脑交流的新方法。它还能帮助无法说话的人(例如患有肌萎缩侧索硬化症 (ALS) 或中风康复的人)重新获得与外界交流的能力。
脑机接口社区
2022/08/26
4060
工程师将大脑信号直接转化为语音
java定义数组变量初始化为0_java中怎么数组初始化?
//数组定义最方便的就是用for循环来做定义,数组下标是从e69da5e6ba9062616964757a686964616f313333656462620开始,到11的话就是12个数字。要输出的话可以用以//号注释掉的后面的一句if(i<12){System.out.println(x[i]);}当然也可以自己再写一个for循环语句来输出,不过我觉得这有点画蛇添足了
全栈程序员站长
2022/09/27
1.3K0
1.初始redis
老钱说的redis的基础数据结构其实并不是redis最基础的数据结构,还有更基础的数据结构需要我们去挖掘,下面和大家一起再深挖一下,让自己更痛苦一点!哈哈!
Share猿
2019/08/16
3910
1.初始redis
细说ReactiveCocoa的冷信号与热信号系列(1)
ReactiveCocoa(简称RAC)是最初由GitHub团队开发的一套基于Cocoa的FRP框架。FRP即Functional Reactive Programming(函数式响应式编程),其优点是用随时间改变的函数表示用户输入,这样就不需要可变状态了。我们之 前的文章“RACSignal的Subscription深入分析”里曾经详细讲解过RAC核心概念之一RACSignal的实现原理。在美团客户端中,我们大量使用了这个框架。冷信号与热信号的概念很容易混淆并造成一定的问题。鉴于这个问题具有一定普遍性,我
美团技术团队
2018/03/12
1.1K0
网卡初始化,组装frame,处理电信号过程
ip模块中存储的是一堆数字信号,网卡内部会把数字信号转换成电信号或者光信号在网线中传输。
小柔
2022/10/09
1K0
网卡初始化,组装frame,处理电信号过程
如何将数组的所有成员初始化为相同的值
C++ algorithm 有两个函数 – fill 和 fill_n,可以给数组赋值,
ClearSeve
2022/02/11
2.7K0
[Glide4源码解析系列] — 1.Glide初始化
[Glide4源码解析系列]--1.Glide初始化 [Glide4源码解析系列]--2.Glide数据模型转换与数据抓取 [Glide4源码解析系列]--3.Glide数据解码与转码
开发的猫
2020/04/01
1K0
[Glide4源码解析系列] — 1.Glide初始化
5.信号处理(1) --常用信号平滑去噪的方法
前言:最近研究汽车碰撞的加速度信号,在信号的采集过程中难免遇到噪音,导致信号偏差,为了更好的反映系统情况,故常需要信号去噪,本文分享一些 常用信号平滑去噪的方法。
用户9925864
2022/07/27
5.7K0
5.信号处理(1) --常用信号平滑去噪的方法
信号分析与处理1「建议收藏」
X=FFT(x); X=FFT(x,N); x=IFFT(X); x=IFFT(X,N)
全栈程序员站长
2022/09/20
9760
计算列与度量值
Power BI虽然源于Excel,但毕竟是不同的产品。我们要试图抛弃Excel中单元格思维的方式,在BI中的表是以列式存储,没有Excel中以A1单元格定位的形式,对于习惯于Excel的你可能要适应一段时间,不过这是件好事情,因为这样的方式使公式易于阅读理解。
公众号PowerBI大师
2019/08/06
2.3K0
计算列与度量值
go源码剖析1 初始化
实际上, 编译好的二进制文件的执行入口并非我们所写的main.main函数, 因为编译器会插入一段引导代码,用来完成准备操作,eg命令行参数 运行时初始化等
历久尝新
2020/05/15
4240
django教程1:初始化项目
Django是一个Python的基础web框架,它可以让你在很短的时间内创建一个web应用,在本教程中,我们将通过创建一个博客应用来探究django。
会呼吸的Coder
2022/04/19
6080
django教程1:初始化项目
信号(Django信号、Flask信号、Scrapy信号)
简介 Django、Flask、scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒。 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者,这是特别有用的设计因为有些代码对某些事件是特别感兴趣的,比如删除动作。 下面,分别介绍一下三种信号的使用示例。 Django信号 很多数情况下,我们需要在操作数据库之前或者之后做某些操作,比如说写个日志之类的,我们当然可以找到每一个sql语句,在其前后加一段代码, 但是,这不但浪费时间,还为以后的维
人生不如戏
2018/07/04
1.4K0
1. spring-boot框架初始
本来想从零开始,但是发现简书已有很多文章,在这里就不赘述了,查看spring-boot专题了解更多内容。
MasterVin
2018/08/30
3610
Linux 初始化检查列表1
一台新开的云主机,我们往往需要对其进行初始化,或加入一些简单的调优参数,以适应测试或生产的基本需求
franket
2021/11/26
6080
力扣刷题---初始链表1
注意,循环体设计的条件是,cur指向NULL停止,这是,tail已经为空,所以要限制一下条件.只有当还有后继即tail不为空时,才保留后继.
初阶牛
2023/03/18
1900
力扣刷题---初始链表1
PowerBI DAX 度量值管理 - 驾驭度量值依赖关系,删除无效
很多小伙伴说跟着罗叔已经学习到了很多,一个报告写了几百个度量值了,现在想查找和删除没用的,怎么办呢。
BI佐罗
2020/07/24
1.4K0
PowerBI DAX 度量值管理 - 驾驭度量值依赖关系,删除无效
数字信号常用典型序列(1)
1.单位脉冲序列(单位采样序列)\sigma(n)=\{...,0,\underline{1},0,...\}
一口盐汽水
2020/11/18
1.3K0

相似问题

将张量值初始化为“无”

13

信号量值大于初始化值

16

以django形式将字段初始化为常量值

17

信号无法在VHDL中初始化为整数值

17

信号量数组初始化为NULL,seg故障

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文