code=H14 desc="No web processes running?
-> Я бы посоветовал: дать вашему приложению динамический интерфейс в интерфейсе heroku
В.NET существует Взаимно блокируемый класс со Взаимно блокируемыми статическими методами. Инкремент () и Взаимно блокируемый. Декремент ().
См. http://msdn.microsoft.com/en-us/library/system.threading.interlocked.aspx.
Вы также найдете другие атомарные och конструкции синхронизации в Системе. Поточная обработка пространства имен.
Я записал много блокировки свободные неизменные структуры набора в .NET. Это включает, двоичные деревья, карты, массивы, связанный список, и т.д... Источник и двоичные файлы доступны на галерее кода
Взаимно блокируемый класс имеет все статические методы, должен был сделать простые атомарные операции как инкремент, постепенно уменьшить, сравнить, подкачать, и т.д. Выезд http://msdn.microsoft.com/en-us/library/system.threading.interlocked_members.aspx
Для большинства наборов можно получить синхронизируемый набор через статического участника под названием "Синхронизируемый". Отметьте однако, что это не блокировка свободные конструкции, они просто скрывают беспорядок использования блокировок/семафоров. Проверьте синхронизированный метод набора очереди http://msdn.microsoft.com/en-us/library/system.collections.queue.synchronized.aspx
Для получения информации вероятно (здесь), что.NET 4.0 наследует CCR/TPL от Параллельных Расширений. TPL, в частности, представляет диапазон наборов и других конструкций, разработанных для усовершенствованных сценариев поточной обработки (с минимальными блокировками и т.д.).
На данный момент существует ограниченное количество потоковых наборов и т.д., плюс обычные примитивы блокировки, плюс Interlocked
, и т.д.
Вот проблема, которую я вижу со Взаимно блокируемым классом .NET.
У меня есть несколько потоков, обновляющих счетчик. Каждый поток должен получить уникальное значение счетчика, таким образом никакие потоки не должны получать то же значение.
Путем взаимно блокируемый класс в работах .NET, я имею -
int counter;
void code(){
myThreadVal = Interlocked.increment(counter);
}
теперь, так как оба потока видят то же значение счетчика, они оба могут получить то же значение myThreadVal.
Однако в случае AtomicInteger Java, которого никогда не происходило бы, каждый поток будет всегда получать различное значение.