k-相互制御 on C#
k-相互制御とは同じプロセスがk個まで同時に稼動可能であること。.net frameworkに元からあるMutexクラスをつかうと普通の排他制御(多重起動禁止など)ができる。
id:kazuv3さんの「http://d.hatena.ne.jp/kazuv3/20080923/1222116824」のソースを使うと便利。
このソースをちょこっと拝借してk-相互制御をするプログラムを書いてみた。といってもほとんど同じw
クラスは
public class K_Mutex : IDisposable { Mutex mutex; public K_Mutex(string name, int K) { for (int k = 0; k < K; k = (k + 1) % K) { mutex = new Mutex(false, string.Format("{0}-{1}", name, k)); if (mutex.WaitOne(100)) break; else mutex.Close(); } } public void Dispose() { mutex.ReleaseMutex(); mutex.Close(); mutex = null; } ~K_Mutex() { if (mutex != null) Dispose(); } }
で、使用するときは
static void Main(string[] args) { using (new K_Mutex("name", 3)) { Console.WriteLine("start"); Thread.Sleep(50000); Console.WriteLine("end"); } }
といった感じ。new K_Mutex("name", 3)の3が同時稼動可能数Kになっている。
適当に書いたので、これは頂けない…という部分があればご指摘ください。
id:kazuv3さんに感謝!