- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在C中使用sys/sem.h来实现信号量,但是现在我遇到了一个奇怪的问题,所以我想检查信号量值。我写了这样一个函数:
int sem_set(int semid, int sem_val)
{
union semun sem_union;
sem_union.val = sem_val;
if (semctl(semid, 0 , SETVAL , sem_union) == -1) return 0;
return 1;
}
int sem_get(int semid)
{
union semun sem_union;
return semctl(semid, 0 , GETVAL , sem_union);
}
int sem_wait(int semid)
{
struct sembuf sb;
sb.sem_num = 0;
sb.sem_op = -1;
sb.sem_flg = SEM_UNDO;
if (semop(semid, &sb, 1) == -1)
{
printf("error/n");
return 0;
}
return 1;
}
但是当我运行这样的两个进程时,函数就会出错:
最初 sem.val 设置为 0;
进程1:...printf("%d", sem_get(sem_id));sem_wait(半);...
进程2:...printf("%d", sem_get(sem_id));sem_wait(半);...
假设进程1首先运行并执行sem_wait(semid),我猜进程2应该输出-1,但实际上打印了0。怎么会发生这种事?我的功能错了吗?或者sem.h中的信号量实现与我在类里面学到的不同?
最佳答案
已经有函数 sem_getvalue()
这是一个例子
int sem_getvalue(sem_t *sem, int *valp);
强烈建议在谷歌上搜索一下“如何在 C 中使用信号量”
这样的网页是:
http://www.csc.villanova.edu/~mdamian/threads/posixsem.html#getvalue
这里是 sem_getvalue 手册页的摘录
sem_getvalue() 放置指向 sem 的信号量的当前值 到 sval 指向的整数。
关于c - 在C中使用sys/sem.h,如何获取信号量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31347626/
我正在尝试创建一个基于管道的共享内存。我也在使用信号量,我的一个信号量有问题(也许我确实有更多问题,但我还没有注意到) 这个信号量初始化: if (sem_init(&(sem_readers), 1
我有这个主代码,它使用函数“doit”作为其参数之一来执行 pthread_create 。我有三个 doit 函数,其中每个函数的 P 和 V 放置方式不同,或者根本没有 P 和 V。我的问题是,每
在 linux 代码中,我记得听说 mutex_lock() 周围有一个完整的内存屏障。我想确定它是否也在 sem_xxx 附近。 最佳答案 权威答案在这里: http://pubs.opengrou
我有两个表,Table1 和 Table2。我想选择 Table2 中未包含在 Table1 中的不同行。这是一个例子: Table1 | A | | sem| -
我正在测试新的DiagrammeR 包用于结构方程模型可视化的功能。 我的目标是得到这样的情节: 也许我需要找到有关如何指定边和节点方向的资源,因为 - 使用 DiagrammeR - 我现在只能做这
#!/bin/bash for i in {1..3}; do sem --no-notice --id $$ -j+0 sleep 10 ";" echo Done done sem --n
我正在尝试在 bash 中使用 GNU parallel 并行运行一个程序的多个实例,每个实例都有不同的参数。此外,我希望能够从文件中读取这些参数,并让脚本等待所有并行化作业完成。 GNU paral
我正在尝试使用 SEM 和 R 中的 lavaan 包来比较两组 child 并测试执行功能 (EF) 是否是推理 (CR) 的重要预测因子(我还包括其他协变量)。 我是否正确地与这段代码进行了比较?
我想为带有 lavaan 的 SEM 模型使用 semPlot 为不同的节点设置不同的大小。 library(lavaan) library(semPlot) model <- ' # measu
我区分了 R lavaan包裹cfa()和 sem()帮助页面。没有区别。 下面的代码给出了相同的估计。 如果是这样的话,同一个东西有两个不同的名字有什么意义呢? model <- ' # lat
我在C中使用sys/sem.h来实现信号量,但是现在我遇到了一个奇怪的问题,所以我想检查信号量值。我写了这样一个函数: int sem_set(int semid, int sem_val) { un
我正在读取这样的文件: cat access_logs | grep Ruby 确定哪些 IP 正在访问我的文件之一。它返回一个巨大的列表。我想删除半重复项,即这两行在技术上是相同的 - 除了具有不同
我正在使用 lavaan 并且只观察到变量(没有潜在变量)。我想在模型中包含交互项,但不确定如何执行此操作。 这是我的 model4 <-' interac =~ var1 * var2 Ent ~
我们有某种阴极 Material 的扫描电子显微镜 (SEM) 图像,我的目标是找出图像中裂纹所占的百分比。关于如何做到这一点有什么建议吗?目前,我只是尝试找到图像中“最暗”像素的数量,并获取图像中像
我正试图等到我的休息服务回电收到,但是之后 dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER); 行,一切都停止了,我再也没有收到回电。我的代码如下
我想以矢量化方式计算 pandas DataFrame 每一行中唯一浮点值的平均值(即 numpy.mean)和 sem(即 scipy.stats.sem)。 示例输入: import pandas
我正在尝试从结构方程模型 (SEM) 中找出方差膨胀因子 (VIF)。我的模型是: # load the data library(readxl) Log_And_SurveyResult <- re
我正在尝试编译Polysemy使用 Hint ( Language.Haskell.Interpreter ) 在运行时获取 monad 值。 当我尝试执行此操作时,我确实收到了有关“交互式”代码中
我正在尝试从结构方程模型 (SEM) 中找出方差膨胀因子 (VIF)。我的模型是: # load the data library(readxl) Log_And_SurveyResult <- re
编辑:这段代码非常好(所以把它作为信号量的例子;)。我程序中的错误在另一个地方 - 由我的 friend 发现。 我的功能有问题。有时两个进程进入临界区。我花了10个小时调试后找不到问题。我应该瞄准什
我是一名优秀的程序员,十分优秀!