gpt4 book ai didi

c - 在我的代码中添加信号量重试登录

转载 作者:行者123 更新时间:2023-11-30 15:18:09 24 4
gpt4 key购买 nike

当前情况

我有一个二进制信号量,并且在执行此操作之前我正在对变量进行一些操作,我正在获取信号量锁(其非阻塞信号量),如果其他进程或线程想要获取它,它将失败说信号量时间到。

想要实现

一种重试机制,其中如果信号量锁定由于超时而失败,它将调用我的重试机制,我计划在锁定失败时重试,延迟 1 秒并重试 5 次。

我的问题是信号量锁返回什么,下面是我的方法

errorhandl semretry(){
int count =5;
errorhandl err = NULL;
do{
err = semaphore.lock(); // <<< to me it looks that err will always be NULL
if(semaphore.timeout()) {
sleep (1);
count --;
}
}while(count > 0);
}

关于此方法的任何建议。我想在是否获取锁的基础上做更多的事情。请建议还能做什么。

最佳答案

您可以尝试使用以下 2 种实现中的任意一种。我建议选择第二个。

int semretry(sem_t *sem)
{
int count =5;
int err;
do{
err = sem_trywait(sem);
if(errno == EAGAIN) {
err = EAGAIN;
sleep(1);
count --;
} else {
return 0;
}
}while(count > 0);
return err;
}

int semretry(sem_t *sem)
{
int count =5;
int err;
struct timespec timeout;
do{
clock_gettime(CLOCK_REALTIME, &timeout);
timeout.tv_sec += 1;
err = sem_timedwait(sem, &timeout);
if(err != 0) {
err = EAGAIN;
count --;
} else {
return 0;
}
}while(count > 0);
return err;
}

关于c - 在我的代码中添加信号量重试登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31672756/

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