class Port
{
static readonly object locker = new object();
List<Connection> listOfConnections = new List<Connection>
public void MethodX()
{
Thread.Sleep(10000);
lock(locker)
{
listOfConnections.RemoveAt(0);
}
}
public void ReceiveFromSwitch()
{
lock(locker)
{
if(listOfConnections.Count == 0) listOfConnections.Add(new Connection());
if(listOfConnections.Count == 1) MessageBox.Show("Whatever");
new Thread(()=>MetohodX()).Start();
}
}
}
Это мой код, два разных потока называют метод ReceiveFromSwitch(). Моя цель - получить сообщение «Что бы ни случилось». Сначала начинается один поток. Он переходит в ReceiveFromSwitch, блокирует ресурс, а второй поток ожидает освобождения ресурса. Добавляется соединение в списке, оно переходит в MethodX() и освобождает метод ReceiveFromSwitch для потока в очереди. Второй - метод. Счет равен 1, поэтому он показывает сообщение.Замок в многопоточном режиме
Не работает. Он дает два сообщения «Что бы ни случилось». Как я могу это исправить?
Глупый вопрос, но это два потока, вызывающие метод в том же экземпляре 'Port'? Потому что список не является статичным. – Rotem
Да. это тот же самый экземпляр. – user3076439
Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –