2017-07-27 2 views
-2

ロックされているミューテックスのロックを解除しようとしています。しかし、回復さえして、私はまだ取得ロックされたsync.Mutexから回復する

package main 

import "sync" 

func main() { 
    var l sync.Mutex 
    l.Lock() 
    l.Unlock() 

    defer func() { 
     if recover() != nil { 
      // the return result can be altered 
      // in a defer function call 

     } 
    }() 

    l.Unlock() 

} 

fatal error: sync: unlock of unlocked mutex 
+1

第二l.Unlockを削除します。既にロックされているミューテックスをロックできないのと同じです。 – RayfenWindspear

+1

ロックされていないmutexのロックを解除すると、プログラムが正しくないことを意味し、回復する方法はありません。 – JimB

+0

あなたが何を求めているかは非常に不明です... – RayfenWindspear

答えて

-1

あなたは直後にロック解除にミューテックスを延期することができ、私は私が回復する方法を使用するだろうと思ったのでしかし、それは実行時エラーを生成しましたそれをロックするので、関数を終了するすべてのリターンパスに対してロックを解除する必要はありません。あなたは既にロック解除されたミューテックスのロックを解除することはできません

l.Lock下の[削除] l.Unlock()または

defer l.Unlock() 

のためにそれを変更し、

+0

@downvoters:この回答で何が問題になっていますか?私が何かを欠けていない限り、これは有効な解決策です。 Upvoted。 – thwd

+0

これは技術的には正しいのですが、二重ロック解除からの復旧についての質問のポイントを逃してしまいます。 OPは、第2のUnlockが問題であることを知っています。ランタイムエラーを示すだけです。 – JimB

関連する問題