有3个程序(A,B,C)需要不定时访问同一个文件,如果其中一个占用文件,则另外两个等待,直到占用被释放。在此等待过程中,比如,A先占用,B、C正好也要访问,而C比B要先等待,那么,我就需要A访问完之后让先等待的C程序先访问,B后访问。请问通过什么方法可以实现这样的控制?如果有多个程序呢?谢谢各位帮忙啦!
程序之间通过互斥量自己协调
http://blog.csdn.net/jiaao/article/details/2458237
谢谢!首先,通过互斥的话两个可以,多了,也会乱的。代码如下 :
public class MutexTest
{
private int index = 0;
public MutexTest(int ind) { index = ind; }
public void DoTest()
{
Mutex mutex = new Mutex(false, "MutexTest");
try
{
mutex.WaitOne(10000);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Console.WriteLine(string.Format("my index is {0}...", index));
for (int i = 5; i > 0; i--)
{
Console.WriteLine(i);
Thread.Sleep(1000);
}
mutex.ReleaseMutex();
mutex.Close();
mutex = null;
}
}
class Program
{
static void Main(string[] args)
{
MutexTest mt1 = new MutexTest(1);
Thread th1 = new Thread(new ThreadStart(mt1.DoTest));
MutexTest mt2 = new MutexTest(2);
Thread th2 = new Thread(new ThreadStart(mt2.DoTest));
MutexTest mt3 = new MutexTest(3);
Thread th3 = new Thread(new ThreadStart(mt3.DoTest));
MutexTest mt4 = new MutexTest(4);
Thread th4 = new Thread(new ThreadStart(mt4.DoTest));
th4.Start();
Thread.Sleep(10);
th2.Start();
Thread.Sleep(10);
th1.Start();
Thread.Sleep(10);
th3.Start();
Thread.Sleep(10);
Console.Read();
}
}
代码运行如下:
my index is 4...
5
4
3
2
1
my index is 1...
5
4
3
2
1
my index is 2...
5
my index is 3...
5
4
4
3
3
2
2
1
1
其次,一台电脑上可以建立互斥变量,那么多台电脑呢?仅有互斥是不行的了。不过好是很感谢你!