【问题标题】:shared_timed_mutex not working the way i would expectshared_timed_mutex 没有按照我期望的方式工作
【发布时间】:2022-12-13 00:39:56
【问题描述】:

对我来说,使用 g++,这会中断(无论我什么时候输入 chrono,它都会永远挂起)。但在 Windows 上它工作正常(睡 1 秒):

#include <shared_mutex>
#include <iostream>

int main(int argc, char **argv) {
    std::shared_timed_mutex mut;
    mut.lock();
    std::cout << "before" << std::endl;
    mut.try_lock_shared_for(std::chrono::duration<double>(1));
    std::cout << "after" << std::endl;
}

我应该期望在 linux 上,定时互斥量不能正常工作吗?

【问题讨论】:

  • 您绝对应该期望在 Linux 上,标准未定义的行为可能与在 Windows 上不同。这首先是 UB 的原因之一。

标签: c++ linux windows mutex


【解决方案1】:

您处于未定义行为领域,因此所有行为都是正确的。不允许您尝试在已经拥有(已锁定)互斥锁的线程中锁定互斥锁。

来自cppreference

如果 try_lock_shared_for 被已经在任何模式(共享或独占)中拥有互斥锁的线程调用,则行为未定义。

【讨论】:

    猜你喜欢
    • 2022-08-17
    • 2012-01-13
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2022-12-09
    相关资源
    最近更新 更多