gpt4 book ai didi

macos - mach 内核,锁的最佳使用

转载 作者:行者123 更新时间:2023-12-02 03:56:02 26 4
gpt4 key购买 nike

我正在寻找有关如何设计 Mac OS X 网络内核扩展的特定部分以尽可能快速和高效的建议或指示 - C 语言。

描述:我有两套 TAILQ 列表。一个用于 A 型结构,另一个用于 B 型结构。大多数情况下,我分别处理它们,因此每个都有一个 lock_mtx。有时,我需要修改 A,然后修改 B,然后同时修改两者。它看起来像这样:

Function1:
{
Modify List or Struct A
Modify List or Struct B
Modify List or Struct A & B
Modify List or Struct B
Modify List or Struct A
}

Function2:
{
Modify List or Struct B
Modify List or Struct A & B
Modify List or Struct A
Modify List or Struct A & B
}

我不熟悉锁的使用。所以我只看到两个选项:1. 使用一个锁来保护两个列表。这将是一种浪费,因为它会阻止仅修改 A 的函数在执行仅修改 B 的函数时执行(反之亦然)。

  1. 依次拿下两个锁,然后释放它们。那会给我:

.

   Function1:
{
lock A
Modify List or Struct A
unlock A

lock B
Modify List or Struct B
unlock B

lock A
lock B
Modify List or Struct A & B
unlock B
unlock A

lock B
Modify List or Struct B
unlock B

lock A
Modify List or Struct A
unlock A
}

我认为这会非常昂贵,需要所有这些锁。有没有更好的方法来保护 A 和 B 的交叉修改?

感谢您的建议。

最佳答案

最初,我是在寻找有关上述问题的设计建议。

好吧,事实证明使用内核级互斥锁的想法似乎是正确的调用,没有明确的答案。太多取决于功能的确切结构以及花在不需要在锁定上下文中执行的辅助工作上的时间。

在这种情况下,dario_ramos 和 pmjordan 暗示的最佳答案是分析可行的选项并做出选择。

谢谢大家的帮助。

关于macos - mach 内核,锁的最佳使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12582877/

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