У меня есть программа (C #) со списком тестов, которые нужно сделать.
Также у меня есть два потока. один для добавления задачи в список, а другой для чтения и удаления из него выполненных задач.
Я использую функцию блокировки каждый раз, когда один из потоков хочет получить доступ к списку.
Еще одна вещь, которую я хочу сделать, если список пуст, поток, который должен прочитать из списка, будет спать. и просыпаться, когда первый поток добавляет задачу в список.
Вот код, который я написал:
...
List<String> myList = new List();
Thread writeThread, readThread;
writeThread = new Thread(write);
writeThread.Start();
readThraed = new Thread(read);
readThread.Start();
...
private void write()
{
while(...)
{
...
lock(myList)
{
myList.Add(...);
}
...
if (!readThread.IsAlive)
{
readThraed = new Thread(read);
readThread.Start();
}
...
}
...
}
private void read()
{
bool noMoreTasks = false;
while (!noMoreTasks)
{
lock (MyList)//syncronize with the ADD func.
{
if (dataFromClientList.Count > 0)
{
String task = myList.First();
myList.Remove(task);
}
else
{
noMoreTasks = true;
}
}
...
}
readThread.Abort();
}
Очевидно, я сделал это неправильно, и он не работает должным образом (readTread не читает из списка).
Кто-нибудь знает в чем моя проблема и как ее исправить?
Большое спасибо,