C 如何在函数上交错信号量?

C 如何在函数上交错信号量?,c,fork,semaphore,C,Fork,Semaphore,我正在努力处理我的多进程代码的一部分, 在这里,我共享一个变量并为函数调用递增它 Struct ShMem{ int counter; sem_t mutex; }; void foo(int counter){ sem_post(&mem->mutex); // complex calculation } ShMem *mem; void main(){ for(...){ switch(fork()){

我正在努力处理我的多进程代码的一部分, 在这里,我共享一个变量并为函数调用递增它

Struct ShMem{
  int counter;
  sem_t mutex;
};

void foo(int counter){
    sem_post(&mem->mutex);
    // complex calculation
}

ShMem *mem;
void main(){
    for(...){
        switch(fork()){
            case 0:
                sem_wait(&mem->mutex);
                mem->counter++;
                // no interruption between these steps wanted
                foo(mem->counter);
                exit(0);
        }
    }       
}
我在main和foo上拆分了互斥的wait和post函数

我的意图是不要在时间的增量之间被打断 计数器和函数调用,并让foo的复杂部分并行运行

这条绳子不起作用,因为它挂在任何地方。
也许我在这里使用了错误的机制,有什么建议吗?

fork
创建了一个全新的进程,拥有自己的内存空间。默认情况下,这两个对象看不到相同的
mem
。我假设您希望在复制互斥对象以调用
foo
之前,它禁止更改
mem->counter
?那么为什么不自己将它复制到一个单独的变量中,释放互斥锁,然后用复制的值调用
foo
?@Someprogrammerdude没错,这就是我试图实现的。@Someprogrammerdude我按照你说的做了,它正在工作。非常感谢。你能回答吗?这样我就可以结束这个问题了?是的,但你可能需要
row=++mem->row
。将使
foo
功能更加独立。但是,如果您有死锁或其他问题,它可能无法解决您的问题。仅凭您展示的代码或模糊的故障描述,很难说出任何事情。