0
作爲一個求職面試的問題,什麼是最好的&簡單的方法來實現使用C#的信號量?
請加你的代碼
謝謝! *不使用與Win32 API的semphores,我的意思是要自己實現它。什麼是使用C#實現信號量的最簡單方法?
作爲一個求職面試的問題,什麼是最好的&簡單的方法來實現使用C#的信號量?
請加你的代碼
謝謝! *不使用與Win32 API的semphores,我的意思是要自己實現它。什麼是使用C#實現信號量的最簡單方法?
的.NET框架提供了Semaphore,這樣會是使一個最簡單的方法:
var s = new Semaphore(2, 0);
但我猜面試官更感興趣的是它背後的結構..
您只需要一個全局託管的訪問控制實體,外部實體可以調用該實體來獲取和釋放鎖。在C#中,你可以通過託管一個Web服務或遠程類來公開類似的方法,並且可以保持活動鎖的數量。
當達到鎖定限制時,您只需返回否定響應(如false)以表示無法獲得鎖定。
改編自Parv Sharma的評論。你可能正在看這樣的事情。信號量需要鎖定對resources
的訪問(因爲獲取一個信號槽也是一個保護動作),但resources
本身就是控制號碼可用的鎖。然後,應用程序邏輯將決定究竟是什麼被鎖定。
class CustomSemaphore
{
private static readonly object semaphoreLock = new object();
private static readonly object[] resources = new[] { new object(), new object(), new object(), new object(), new object(), };
public int AcquireLockObject()
{
lock (semaphoreLock)
{
for (int i = 0; i < 5; i++)
{
if (Monitor.TryEnter(resources[i]))
return i;
}
}
return -1; // Lock unsuccessful.
}
public void ReleaseLockObject(int lockIndex)
{
// Sanity check lockIndex range etc.
lock (semaphoreLock)
{
Monitor.Exit(resources[lockIndex]);
}
}
}
是啊是要寫相同的答案 –
@Adriano很明顯,我是在滔滔不絕。這完全取決於有關的工作。對於一個標準的軟件開發角色,我會爭論使用一個經過驗證的測試實現,這個實現是免費的,而不是承擔自定義實現的所有權,這種實現不會帶來額外的好處,而且會花費更多的金錢/時間。如果這項工作是技術性的,他將負責這項工作,那麼語言是不重要的,做這件事的邏輯是重要的。 –
@Adriano:如果我一直在尋找一個脫口秀諧星我會邀請你:),但現在你的評論是毫無意義的 – JavaSa