Для получения ввода из командной строки, например Console.ReadLine ... Chalkers имеет решение следующим образом.
func input() -> String {
var keyboard = NSFileHandle.fileHandleWithStandardInput()
var inputData = keyboard.availableData
return NSString(data: inputData, encoding:NSUTF8StringEncoding) as! String
}
, пожалуйста, спросите, если это не так работа Винод.
MySQL использует только блокировку на уровне таблицы из таблиц MyISAM. Если вы можете, переключитесь на InnoDB для блокировки на уровне строк.
Вот ссылка на сайт MySQL, описывающий блокировки, установленные таблицами SQL для таблиц InnoDB. http://dev.mysql.com/doc/refman/5.0/en/innodb-locks-set.html
Лучше обходным путем является создание столбца, содержащего метку времени. Всякий раз, когда вы хотите заблокировать строку, вы обновляете ее до текущего времени. Чтобы разблокировать обновление до времени не менее x минут в прошлом. Затем, чтобы проверить, не заблокирована ли эта отметка, что отметка времени не менее ста лет.
Таким образом, если процесс завершается с ошибкой (или пользователь никогда не завершает свою работу), блокировка эффективно заканчивается через x минут.
В качестве обходного пути вы можете добавить столбец в свою таблицу, например locked TINYINT(1)
- всякий раз, когда вы хотите, чтобы строка была заблокирована, вы установите ее на 1
. Когда вы пытаетесь получить доступ к этой строке, первое, что вы делаете, это проверить, установлены ли поля locked
.
Чтобы разблокировать строку, просто установите ее на 0
еще раз. Нехорошо, но очень просто обходное решение.
LOCK=0
, они оба переходят в критический раздел, оба i> устанавливают LOCK=1
, и у вас есть ошибка скрытого состояния гонки.
– bobobobo
6 June 2013 в 17:20
Поздно, но надеюсь, что это кому-то поможет:
UPDATE user SET lastusedecnumber = LAST_INSERT_ID(lastusedecnumber + 1);
SELECT LAST_INSERT_ID();
даст вам атомный приращение lastusedecnumber и возможность читать новое значение поля lastusedecnumber
(после увеличения) с помощью SELECT LAST_INSERT_ID()
.
Мне не хотелось конвертировать всю мою базу данных из myisam. Поэтому я просто пытаюсь создать новую таблицу с именем на основе идентификатора записи, которую я хочу заблокировать. Если создать таблицу успешно, выполните мою работу и удалите таблицу в конце. Если создать таблицу не удалось, остановитесь.