Multithreading std::sync::信号量超时
我有一个Multithreading std::sync::信号量超时,multithreading,rust,semaphore,Multithreading,Rust,Semaphore,我有一个std::sync::信号灯 pub struct MyStruct { lock: std::sync::Semaphore } 有一个线程以一定间隔调用信号量上的release,以指示队列中有新项目可用 同时,为了处理项目,我想获取信号量: myStruct.lock.acquire(); 但是如果采集需要很长时间,我想做一些其他的事情,比如返回一个错误代码,而不是无限期地等待资源。但这一呼吁永远无法实现 如何设置超时,以便只在信号灯上等待有限的时间?是否适合您的情况?据
std::sync::信号灯
pub struct MyStruct {
lock: std::sync::Semaphore
}
有一个线程以一定间隔调用信号量上的release
,以指示队列中有新项目可用
同时,为了处理项目,我想获取信号量:
myStruct.lock.acquire();
但是如果采集需要很长时间,我想做一些其他的事情,比如返回一个错误代码,而不是无限期地等待资源。但这一呼吁永远无法实现
如何设置超时,以便只在信号灯上等待有限的时间?是否适合您的情况?据我所知,在没有人等待的情况下,调用Condvar.notify_one()无效,而semaphore.release()将增加信号灯。如果线程出现并在发送通知后等待,则行为不同。
Mutex
加上Condvar
可以满足此用例,事实上,这就是信号量
本身的实现方式。复制信号量
代码并添加一个acquire\u和\u timeout
不会太难。