gpt4 book ai didi

信号量可以用于访问同一个库的两个不同应用程序吗

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:52 26 4
gpt4 key购买 nike

我有两个不同的应用程序访问 Linux 共享库中的相同代码。

案例一:-当第一个应用程序访问库中的代码时,它会获取锁。但是当第二个应用程序访问相同的代码时,它如何知道锁已经被应用,因为将为第二个应用程序创建另一个单独的代码副本。

最佳答案

Semaphore 是一个内核变量。

将信号量视为可用的特定资源单位数量的记录,加上操作以安全地(即没有竞争条件)调整该记录作为需要或成为单位免费,如有必要,等待资源的一个单元可用 link

所以当您锁定您的信号量时,它的值将为 0(零),这表明它现在不可用。因此,当其他进程由于锁定而尝试访问该共享区域时,共享区域将不可用。当信号量被解锁时,该值将为 1(一),这意味着它现在可用。

因为它是一个内核变量,我们用它来同步

There are no methods for accessing the value of semaphore we rely on Semaphore's invariant to define its behavior.

在基于 Unix 的系统上,代码段 (.text) 可以在多个进程之间共享,因为它是不可变的。共享库的代码由操作系统映射到内存中。

基本上,每个包含静态数据(例如全局变量)的共享库都有一个全局偏移表GOT .在共享库上,所有对静态数据(全局)的引用都是通过。因此,即使代码段在多个进程之间共享,每个进程都有其对共享库其他段的独占映射,包括相应的全局偏移表,其条目会相应地重新定位。复杂度由 CPU 的内存管理单元解决。

你可以通过这个链接Dynamic Linking and Loading memory management

关于信号量可以用于访问同一个库的两个不同应用程序吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23732264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com