何时应使用共享锁定(读取锁定)



有人可以解释何时应该使用共享锁吗?如果我理解正确,读取时使用共享锁,写入时使用独占锁。

但是为什么我不能在执行读取时锁定互斥锁时等待。

它用于提高性能。这样就不必按顺序进行多个并发读取,如果频繁读取结构,这可能是一个很大的奖励。(但读取的数据仍将是一致且最新的。

但是为什么我不能在执行读取时锁定互斥锁时等待。

通常是为了速度。共享锁允许多个读取器,因为内容不会更改。独占锁只允许单个(通常(写入操作,因为您希望所有写入都是原子的。

更多技术定义从这里开始。

独占锁可保护文件资源的更新,两者都可恢复 且不可恢复。它们只能由一个事务拥有 时间。任何需要独占锁的交易都必须等待,如果 另一个任务当前拥有独占锁或共享锁 请求的资源。共享锁

共享锁支持读取完整性。他们确保记录不是 在只读请求期间进行更新的过程中。共享 锁还可用于防止在时间之间更新记录 读取记录和下一个同步点。

共享锁(也称为读锁(禁止任何其他进程请求对文件的指定部分进行写锁定。但是,其他进程可以请求读锁定并继续从资源读取。

独占锁

(也称为写锁(为进程提供写入文件指定部分的独占访问权限,并将阻止任何其他进程获取对资源的任何类型的锁定,直到释放独占锁。

因此,读锁说">

你现在可以读,但如果你想写,你必须等待",而写锁说"你必须等待"。

有关官方说明,请查看 GNU C 库的官方锁文档。

此外,在许多情况下,共享/独占锁定的上下文是悲观/乐观锁定,这是一种用于处理多用户读取/写入同一资源的方法。以下是该方法的解释。

但是为什么我不能在执行读取时锁定互斥锁时等待。

因为这在某些情况下效率低下,特别是那些许多线程经常读取数据结构,但很少有人写入并且不经常读取的情况下。由于如果没有人在写入,多个并发读取是线程安全的,因此对读取器进行相互排斥将是一种浪费。

想象一下,一台服务器和多个客户端对一些共享数据进行各种事务处理。如果这些客户端中的大多数只是请求信息,但没有更改任何内容,那么如果服务器一次只允许一个客户端读取,则服务器的性能将很糟糕。

最新更新