到目前为止,我在线阅读的几乎所有代码和教程都涉及使用互斥锁和信号量来实现线程之间的同步.它们可以用于在进程之间进行同步吗?
我想编写看起来像这样的代码:
void compute_and_print() {
// acquire mutex
// critical section
// release mutex
}
void main() {
int pid = fork();
if ( pid == 0 ) {
// do something
compute_and_print();
}
else {
// do something
compute_and_print();
}
}
>有人能指出我这样做的类似代码吗?
>我理解不同的进程有不同的地址空间,但是我想知道上面是不同的地址空间,但是,互斥量不会引用相同的内核对象吗?
解决方法:
对的,这是可能的.有许多方法可以同步不同的进程.也许这个领域中最受欢迎的互斥解决方案是0700年的System V IPC semaphores和atomic operations.我建议你阅读David A Ruslin的书第Interprocess Communication Mechanisms页的第5章,或者说更好 – 整本书.
至于你的第二个问题,商品硬件上的大多数现代操作系统会将进程放在不同的地址空间中,尽管进程也可能共享相同的地址空间(参见Virtual Memory,Memory Protection).无论哪种方式,如果IPC机制由内核处理,那么两个进程将引用相同的“内核对象”,如您所述.如果在没有内核的情况下(几乎)实现互斥(例如某种使用“共享内存”的自旋锁),则两个进程都会引用相同的物理内存,即使它们的内存虚拟地址可能不同.
希望能帮助到你.祝好运!
标签:linux,process,mutex,ipc
来源: https://codeday.me/bug/20190517/1120449.html