在线程之间做一次某件事
本文关键字:一次 线程 之间 | 更新日期: 2024-09-25 14:22:58
我有一个使用多个线程从web服务进行查询的情况。偶尔,我必须向web服务器验证自己,因为会话在此时间之后过期。我这样做授权:
static void threadCall(){
try{
ws.query();
}
catch(AuthenticationFailException ex){
AuthAgain();
threadCall();
return;
}
}
问题是,多个线程的身份验证失败,并且多个线程希望同时进行身份验证。这会减慢进程,所以我只想对1个线程进行身份验证,并希望其他线程等待身份验证完成。我怎样才能做到这一点。
我会这样做。
bool authenticated = false;
object lockObject = new object();
static void threadCall(){
verifyAuthentication();
try{
ws.query();
}
catch(AuthenticationFailException ex){
authenticated = false;
threadCall();
return;
}
}
static void verifyAuthentication()
{
if (!authenticated)
{
lock (lockObject)
{
if (!authenticated)
{
AuthAgain();
authenticated = true;
}
}
}
}