【问题标题】:mechanism apart from locking(spin lock, sempahore) for Synchronization除了用于同步的锁定(自旋锁、信号量)之外的机制
【发布时间】:2014-09-24 00:31:09
【问题描述】:

我知道 c 语言中的同步有多种机制,如自旋锁、信号量、seq_lock、条件变量等,每种都有其优缺点,何时使用取决于具体情况。

但是上面的每个同步机制都会给程序增加一些额外的处理。

这是一个面试问题“除了同步锁定还有其他方法吗”。我说我们可以使用 Barriers 或我们自己的 wait_queue 但这可能只是在某些情况下有用,而不是在某些情况下可能是 1 或 2。

那么除了锁定(自旋锁,信号量)之外还有什么机制可以实现同步吗?

【问题讨论】:

    标签: multithreading linux-kernel operating-system synchronization locking


    【解决方案1】:

    在内核中锁定是昂贵的。除了上述内容之外,您还有 RCU:Read-Copy-Update,它将更新和回收信息分开,读取器和写入器都可以完全避免锁定。

    它不是上述的完整替代方案,因为它取决于您尝试序列化的内容。您还可以考虑使用 per-cpu 数据结构并避免全局昂贵的锁,这仍然需要与 ISR 同步,而必须禁用抢占。忘记在位和整数上添加原子操作。

    【讨论】:

    • 是的,这似乎是正确的,但它不能总是用作锁定的替代品。
    • 所使用的每个同步机制都取决于试图解决的问题。
    • 你认为这是完整的解决方案吗?当我们想要同步时,可以在任何情况下使用锁定机制。
    猜你喜欢
    • 2014-06-24
    • 2010-09-16
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    相关资源
    最近更新 更多