gpt4 book ai didi

c++ - `std::timed_mutex` 的有效用例?

转载 作者:行者123 更新时间:2023-11-30 03:02:18 25 4
gpt4 key购买 nike

在哪些情况下会出现 std::timed_mutex优于常规互斥体?

我能想到的唯一用例是(IMO hackish)防止死锁的方法。

在哪些其他情况下 std::timed_mutex 是一个不错的选择?

最佳答案

这是 Windows 上的常见设计实践,您可以使用 WaitForSingleObjectWaitForMultipleObjects 和超时值,指定等待失败的时间。

它不用于解决死锁(这真的无济于事,糟糕的线程代码就是糟糕的线程代码)。

请记住,在 Windows Vista 发布之前,Windows 没有 Posix 条件变量的等价物,这是一种完全不同的多线程编码范例,它起到了一定的作用,但并不是定时互斥锁存在的唯一原因.

您不会在基本示例中看到定时等待的使用,但在复杂的架构中您会经常遇到它。您使用互斥锁的一个例子通常是某种生产者-消费者架构,在这种架构中,客户端必须每 x 秒做一些事情,并且可能以事件的形式出现“中断”被触发。一个简单的伪代码示例:

//This code will run indefinitely, printing the value of 
//the variable x every 1 second until an interrupt is received
while(timed_wait(end_mutex, 1 second) != success)
print(x)

是的,这段代码可以重写如下:

while(true){
sleep(1 second)
wait(mutex)
done = globalDone
unlock(mutex)

if(done) break
else print(x)
}

但前面的示例更清晰且响应更快,因为它不是 sleep (即,只要互斥体可用,它就会停止)。

请注意,Linux 具有不属于 Posix 标准一部分的附加功能,用于对互斥体执行定时等待(pthread_mutex_timedlock,但我认为它现在在 posix 规范中)。 OS X 和 BSD 上的 sysv 信号量也是如此。如果您足够聪明,只在适当的时候使用它,那么它是一个有用的工具。

关于c++ - `std::timed_mutex` 的有效用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10256394/

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