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
功能更加独立。但是,如果您有死锁或其他问题,它可能无法解决您的问题。仅凭您展示的代码或模糊的故障描述,很难说出任何事情。