1

異なるユーザーによって作成されたプロセス間でmutexという名前のブーストを共有する際に問題があります。最初のプロセスは、LocalSystemとしてログオンするサービスによって作成されます。2番目のプロセスは自分で作成します(プロセスを通常どおり実行するだけです)。

両方のプロセスがこの関数を実行します(C ++):

void MyFunc()
{
   //Open or create the named mutex
   named_mutex mutex(open_or_create, "mymutex");
   {
      scoped_lock<named_mutex> lock(mutex);
      DoSomeWork();
   }
   named_mutex::remove("mymutex");
}

現在、両方のプロセスがDoSomeWork()に同時に入ることができることを確認しています。この問題は、サービスが「自分」としてログオンした場合にのみ発生するわけではなく、2番目のプロセスを管理者として実行します。

これの代わりに、ブーストまたはいくつかの単純なコードでこの問題を解決する方法はありますか? http://support.microsoft.com/kb/193073

(ミューテックス名を「Global \ mymutex」に設定しようとしましたが、ミューテックスを作成できません)(Windows CreateMutex()も使用しようとしましたが、kb193073で説明したように、同じ問題が発生します)

ありがとう!

サイモン

4

1 に答える 1

1

管理者として問題はないと言う場合は、パーミッションに関係している可能性があります。これを試してください。

void MyFunc()
{
  //Open or create the named mutex
  permissions allow_all;
  allow_all.set_unrestricted();
  named_mutex mutex(open_or_create, "mymutex", allow_all);
  {
     scoped_lock<named_mutex> lock(mutex);
     DoSomeWork();
  }
  named_mutex::remove("mymutex");
}
于 2012-11-21T10:41:41.280 に答える