- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
编辑:这段代码非常好(所以把它作为信号量的例子;)。我程序中的错误在另一个地方 - 由我的 friend 发现。
我的功能有问题。有时两个进程进入临界区。我花了10个小时调试后找不到问题。我应该瞄准什么?这段代码有没有可能有bud?
// lock semaphore
static int P(int sem_id)
{
struct sembuf sem_b;
sem_b.sem_num = 0;
sem_b.sem_op = -1; /* P() */
sem_b.sem_flg = 0;
if (semop(sem_id, &sem_b, 1) == -1) {
// error
return(0);
}
return(1);
}
// unlock semaphore
static int V(int sem_id)
{
struct sembuf sem_b[1];
sem_b.sem_num = 0;
sem_b.sem_op = 1; /* V() */
sem_b.sem_flg = 0;
if (semop(sem_id, &sem_b, 1) == -1) {
// error
return(0);
}
return(1);
}
static int set_semval(int sem_id) {
// set to 1 (opened semaphore)
if (semctl(sem_id, 0, SETVAL, 1) == -1) {
// error
return(0);
}
return(1);
}
static int get_val(int sem_id)
{
union semun sem_union;
//sem_union.val = 0; ?
return semctl(sem_id, 0, GETVAL, sem_union);
}
Action 循环:
// semaphores init
int mutex;
if ((mutex=semget(key+2, 1, 0666))>=0) {
// semaphore exists
fprintf(stderr,"semaphore exists for key %d\n", key+2);
}
if ((mutex=semget(key+2, 1, 0666 | IPC_CREAT)) == -1) {
exit(EXIT_FAILURE);
}
if (!set_semval(mutex)) {
exit(EXIT_FAILURE);
}
fork() // some times with good conditionals
// in some children
while(1) {
P(mutex);
assert(get_val(mutex)==0); // always ok
action(); // sometimes made by two processes at same time - fault
V(mutex);
}
请随时编辑我的问题。
非常感谢
最佳答案
在您的“ Action 循环”中,如果您的信号量不存在,您会怎么做?
目前,您传递给 semget 的第三个参数是 0666 或 PERMISSION_RW 常量。你可能想使用:
shmget(key, 1, PERMISSION_RW | IPC_CREAT);
这样,如果您的信号量不存在,它将创建一个。
关于c - 在 C 问题 sys/sem 中锁定信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2739043/
我正在尝试创建一个基于管道的共享内存。我也在使用信号量,我的一个信号量有问题(也许我确实有更多问题,但我还没有注意到) 这个信号量初始化: 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个小时调试后找不到问题。我应该瞄准什
我是一名优秀的程序员,十分优秀!