ミューテックスの理解が誤っていた

Mutex::WaitOne(:Integer,:boolean)を実行するたびにシグナルを取りにいこうとするもんだと思っていたけど
実際は、第1引数で指定した時間分*1シグナルを取りに行こうとするという仕様みたいだ

ソース

Public Shared Function Main(ByVal Args() As String) As Integer
  Dim objMutex As Mutex = New Mutex(False, Application.ProductName)
  If (objMutex.WaitOne(24 * 60 * 60 * 1000, False) = False) Then
    MessageBox.Show("待ちきれません!")
    Return -1
  End If
  
  'ここに処理を書く
  
End Function

1日待ってもシグナルが取れなかった場合はメッセージ表示して落ちる

ミューテックスの詳しくはこちら
ミューテックス - Wikipedia
javaでいうとsynchronizedなんだね!知らなかったよ!

別スレッドで同じオブジェクトをいじりたい時など、同プロセス内で同期を取りたいなら

SyncLock Me
  '同期中の処理
End SyncLock

という風に書く
まぁ、.NETでスレッドなんて使ったことないんだけども...

*1:ミリ秒