加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 将mutexes / semaphores与进程一起使用

发布时间:2020-12-14 01:04:49 所属栏目:Linux 来源:网络整理
导读:到目前为止,我在线阅读的几乎所有代码和教程都涉及使用互斥锁和信号量来实现线程之间的同步.它们可以用于在进程之间进行同步吗? 我想编写看起来像这样的代码: void compute_and_print() { // acquire mutex // critical section // release mutex}void mai
到目前为止,我在线阅读的几乎所有代码和教程都涉及使用互斥锁和信号量来实现线程之间的同步.它们可以用于在进程之间进行同步吗?

我想编写看起来像这样的代码:

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机制由内核处理,那么两个进程将引用相同的“内核对象”,如您所述.如果在没有内核的情况下(几乎)实现互斥(例如某种使用“共享内存”的自旋锁),则两个进程都会引用相同的物理内存,即使它们的内存虚拟地址可能不同.

希望能帮助到你.祝好运!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读