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

博客讨论了如何使用互斥锁和信号量实现线程间的同步,并指出这些机制同样适用于进程同步。文章提到了System V IPC、原子操作以及Linux环境下的进程间通信。还解释了即使进程拥有不同的地址空间,内核对象仍可用于同步。
摘要由CSDN通过智能技术生成

到目前为止,我在线阅读的几乎所有代码和教程都涉及使用互斥锁和信号量来实现线程之间的同步.它们可以用于在进程之间进行同步吗?

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值