我有一種方法,我希望只有一個用戶可以一次訪問。我真的不知道該怎麼做。如何使一個用戶可以在c中同時訪問一個方法#
public static int add(int a, int b)
{
int c = a+b;
return c;
}
我在用戶在兩個文本框中輸入數據並在asp.net網頁上單擊提交按鈕時調用此方法。 我不希望其他用戶訪問被拒絕。他們應該保持在某種排隊狀態,並且當方法完成時服務一個用戶應該服務下一個用戶。
我有一種方法,我希望只有一個用戶可以一次訪問。我真的不知道該怎麼做。如何使一個用戶可以在c中同時訪問一個方法#
public static int add(int a, int b)
{
int c = a+b;
return c;
}
我在用戶在兩個文本框中輸入數據並在asp.net網頁上單擊提交按鈕時調用此方法。 我不希望其他用戶訪問被拒絕。他們應該保持在某種排隊狀態,並且當方法完成時服務一個用戶應該服務下一個用戶。
:資源下載得到很好的解釋,查閱文檔。 Thread Synchronization
既然你有一個靜態方法,你需要靜態的Object
進行鎖定。
public class Calculator
{
private static System.Object lockThis = new System.Object();
public static void Add(int a, int b)
{
lock (lockThis)
{
return a+b;
}
}
}
即lock
手段,每當一個線程訪問該方法,它沒有被鎖定,它將鎖定和運行代碼。如果它被鎖定,它將不會做任何事情,直到它被解鎖。編號: 您的方法的編輯代碼。
如果其他用戶同時發送請求會發生 – user3202862
@ user3202862不會因爲第一個線程鎖定了該方法,這意味着其他線程在那段時間內將無法訪問該方法。 –
如何存儲其他用戶數據,然後在免費時將該數據發送到此方法 – user3202862
您將需要一個靜態對象,並使用關鍵字鎖定。
private static object locker = new object();
public static int add(int a, int b)
{
lock(locker)
{
//do stuff
}
}
您的意思是它必須是線程安全的?使用你的.NET同步機制之一,例如一個鎖(但我們不能從這樣的虛構例子中說出,爲什麼你必須這樣做?你訪問共享資源還是靜態變量?) –
Define「one用戶「......因爲ASP.NET可能跨越多個應用程序域(在回收期間)或多臺機器(服務器場) - 這需要多嚴格?同一個用戶可以向該方法發出多個併發http請求嗎?這裏的「用戶」是否真的意味着「請求」?那麼重入電話呢? **什麼是我們試圖通過限制訪問來保護**(這是問題的重要背景;沒有必要對所示方法做任何事情,因爲沒有共享狀態) –
@Adriano是我正在使用共享資源,並且一次可以提供一個用戶 – user3202862