Как я могу записать, что условное выражение привязывает C#?

Удаление ненужных файлов с помощью git rm приведет к удалению этих файлов из дерева файлов в коммите, в котором вы их удалили, но это не приведет к уменьшению репозитория Git, поскольку Git хранит историю всех старых коммитов, все еще находящихся в коммите. хранилище и, следовательно, все файлы, которые они содержат.

Я не хочу вдаваться в то, как переписать историю, чтобы удалить эти большие файлы - это подробно обсуждается здесь: Как удалить / удалить большой файл из истории коммитов в репозитории Git? , но если вы только начали использовать Git для этого проекта, проще всего начать с нового репо.

7
задан dpan 6 April 2009 в 08:25
поделиться

7 ответов

Action doThatThing = someMethod;

if (condition)
{
  lock(thatThing)
  {
     doThatThing();
  }
}
else
{
  doThatThing();
}
6
ответ дан 6 December 2019 в 05:08
поделиться

Я думаю, что вопрос кричит "состояние состязания!". Что, если повороты условия от истинного до лжи вскоре после проверки, но прежде чем поток вводит критический раздел кода? Или в то время как поток находится в процессе выполнения его?

9
ответ дан 6 December 2019 в 05:08
поделиться

Я не эксперт по поточной обработке, но это кажется, что Вы могли бы искать что-то вроде этого (перепроверяемая блокировка). Идея состоит в том, чтобы проверить условие и прежде и после получения блокировки.

private static object lockHolder = new object();

if (ActionIsValid()) {
  lock(lockHolder) {
    if (ActionIsValid()) {
       DoSomething();    
    }
  }
}
8
ответ дан 6 December 2019 в 05:08
поделиться
bool locked = false;
if (condition) {
    Monitor.Enter(lockObject);
    locked = true;
}
try {
    // possibly critical section
}
finally {
    if (locked) Monitor.Exit(lockObject);
}

Править: да, существует состояние состязания, если Вы не можете гарантировать, что условие является постоянным, в то время как потоки входят.

7
ответ дан 6 December 2019 в 05:08
поделиться

На самом деле, для предотвращения состояния состязания я испытал бы желание использовать a ReaderWriterLockSlim здесь - рассматривают параллельный доступ как блокировку чтения и эксклюзивный доступ как блокировка записи. Тот путь, если изменение условий Вы не закончите с некоторым несоответствующим кодом, все еще выполняющимся вслепую в регионе (под ложным предположением, что это безопасно); немного подробный, но (отформатированный для пространства):

        if (someCondition) {
            lockObj.EnterReadLock();
            try { Foo(); }
            finally { lockObj.ExitReadLock(); }
        } else {
            lockObj.EnterWriteLock();
            try { Foo(); }
            finally { lockObj.ExitWriteLock(); }
        }
5
ответ дан 6 December 2019 в 05:08
поделиться

Используйте Перепроверяемый шаблон блокировки, как предложено выше. это - прием IMO :)

удостоверьтесь, что у Вас есть свой объект блокирования как помехи, как перечислено в примере not.that.dave.foley.myopenid.com.

2
ответ дан 6 December 2019 в 05:08
поделиться

Я предполагаю, что у Вас есть некоторый код, который немного походит на это:

private Monkey GetScaryMonkey(int numberOfHeads){
    Monkey ape = null;        
    lock(this) {
        ape = new Monkey();
        ape.AddHeads(numberOfHeads);            
    }
    return ape;
}

Сделать это условное выражение не могло Вы просто сделать это:

private Monkey GetScaryMonkey(int numberOfHeads){
    if ( numberOfHeads > 1 ) {
         lock(this) {
            return CreateNewMonkey( numberOfHeads );          
        }
    }
    return CreateNewMonkey( numberOfHeads );
}

Должен работать, нет?

1
ответ дан 6 December 2019 в 05:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: