Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading std::sync::信号量超时_Multithreading_Rust_Semaphore - Fatal编程技术网

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
不会太难。