第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否使用Mutex防止同一程序的多個實(shí)例安全運(yùn)行?

是否使用Mutex防止同一程序的多個實(shí)例安全運(yùn)行?

C#
慕碼人8056858 2019-10-17 12:53:15
我正在使用此代碼來防止我的程序的第二個實(shí)例同時(shí)運(yùn)行,這安全嗎?Mutex appSingleton = new System.Threading.Mutex(false, "MyAppSingleInstnceMutx");if (appSingleton.WaitOne(0, false)) {    Application.EnableVisualStyles();    Application.SetCompatibleTextRenderingDefault(false);    Application.Run(new MainForm());    appSingleton.Close();} else {    MessageBox.Show("Sorry, only one instance of MyApp is allowed.");}我擔(dān)心如果發(fā)生異常并且應(yīng)用程序崩潰,則Mutex仍將保留。真的嗎?
查看完整描述

3 回答

?
紅糖糍粑

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個贊

通常,這是可行的。然而,細(xì)節(jié)在于魔鬼。

首先,您要關(guān)閉一個finally塊中的互斥量。否則,您的進(jìn)程可能會突然終止,并使其處于信號狀態(tài),例如異常。這樣可以使將來的流程實(shí)例無法啟動。

但是,不幸的是,即使有一個finally塊,您也必須處理一個潛在的問題,即在不釋放互斥量的情況下終止進(jìn)程。例如,如果用戶通過TaskManager終止了進(jìn)程,則可能發(fā)生這種情況。有一個在你的代碼中的競爭條件,將允許第二處理,得到AbandonedMutexExceptionWaitOne通話。您將需要一個恢復(fù)策略。

我鼓勵您閱讀Mutex類的詳細(xì)信息。使用它并不總是那么簡單。


擴(kuò)展種族條件的可能性:

可能發(fā)生以下事件序列,這將導(dǎo)致應(yīng)用程序的第二個實(shí)例拋出:

  1. 正常流程啟動。

  2. 第二個進(jìn)程啟動并獲取互斥鎖的句柄,但在WaitOne調(diào)用之前已被關(guān)閉。

  3. 進(jìn)程#1突然終止?;コ怏w不會被破壞,因?yàn)檫M(jìn)程2具有句柄。而是將其設(shè)置為放棄狀態(tài)。

  4. 第二個進(jìn)程再次開始運(yùn)行并得到一個AbanonedMutexException。


查看完整回答
反對 回復(fù) 2019-10-17
?
紅顏莎娜

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個贊

為此目的,使用Windows事件更為常見和方便。例如


static EventWaitHandle s_event ;


bool created ;

s_event = new EventWaitHandle (false, 

    EventResetMode.ManualReset, "my program#startup", out created) ;

if (created) Launch () ;

else         Exit   () ;

當(dāng)您的進(jìn)程退出或終止時(shí),Windows將為您關(guān)閉事件,如果沒有剩余的打開句柄,則將其銷毀。


添加了:用于管理會話,事件(或互斥)名稱的使用Local\和Global\前綴。如果您的應(yīng)用程序是按用戶使用的,則只需在事件名稱后附加一個經(jīng)過適當(dāng)修飾的登錄用戶名即可。


查看完整回答
反對 回復(fù) 2019-10-17
?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個贊

您可以使用互斥鎖,但首先請確保這確實(shí)是您想要的。

因?yàn)闆]有明確定義“避免多個實(shí)例”。這可能意味著

  1. 不管該用戶會話具有多少個桌面,都應(yīng)避免在同一用戶會話中啟動多個實(shí)例,而應(yīng)允許多個實(shí)例同時(shí)為不同的用戶會話運(yùn)行。

  2. 避免在同一桌面上啟動多個實(shí)例,但是只要每個實(shí)例都在單獨(dú)的桌面上,就允許多個實(shí)例運(yùn)行。

  3. 無論存在多少個桌面或以該帳戶運(yùn)行的會話,都應(yīng)避免為同一用戶帳戶啟動多個實(shí)例,但要允許以不同用戶帳戶運(yùn)行的會話同時(shí)運(yùn)行多個實(shí)例。

  4. 避免在同一臺計(jì)算機(jī)上啟動多個實(shí)例。這意味著無論任意數(shù)量的用戶使用多少個桌面,最多都可以運(yùn)行該程序的一個實(shí)例。

通過使用互斥鎖,基本上就是在使用定義數(shù)字4。


查看完整回答
反對 回復(fù) 2019-10-17
  • 3 回答
  • 0 關(guān)注
  • 633 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號