любая идея, как использовать FFI :: Platypus :: Lang :: ASM с Perl, пример будет оценен по достоинству
blockquote>Автор этого модуля не предоставил никаких примеров. для этого кода сами. Похоже, что это может быть незаконченный проект.
В любом случае, это довольно странная вещь, которую хочется сделать. Perl работает на паре уровней абстракции от сборки - взаимодействие между ними в лучшем случае неудобно.
Более практичным решением будет написание C-кода, который вызывает ваш ассемблерный код (или встраивает его как встроенную сборку), а затем адаптирует этот код к Perl с использованием XS.
При помощи синхронизируемого на блокировке статического метода Вы будете синхронизировать методы класса и атрибуты (в противоположность методам экземпляра и атрибутам)
, Таким образом, Ваше предположение будет корректно.
я задаюсь вопросом, если создание синхронизируемого метода является правильным подходом для обеспечения потокобезопасности.
Едва ли. Необходимо позволить той работе сделать RDBMS вместо этого. Они способны к этому виду материала.
единственная вещь Вы доберетесь путем синхронизации доступа к базе данных, должен подать ужасно медленную заявку. Далее больше в коде, который Вы отправили, Вы создаете Фабрику Сессии каждый раз, тот путь, Ваше приложение проведет больше времени, получая доступ к DB, чем выполнение фактического задания.
Воображают следующий сценарий:
Клиент A и B пытаются вставить другую информацию в запись X из таблицы T.
С Вашим подходом единственная вещь, которую Вы получаете, состоит в том, чтобы удостовериться, что каждого называют после другого, когда это произошло бы так или иначе в DB, потому что RDBMS будет препятствовать тому, чтобы они вставили половину информации от A и половины от B одновременно. Результатом будет то же, но только 5 раз (или больше) медленнее.
, Вероятно, могло быть лучше смотреть на "Транзакции и Параллелизм" глава в Быть в спящем режиме документации. Большинство времен проблемы, которые Вы пытаетесь решить, уже были решены и намного лучший путь.
Обратиться к вопросу в более общем плане...
Имеют в виду, что использование синхронизировалось на методах, действительно просто стенография (предположите, что классом является SomeClass):
synchronized static void foo() {
...
}
совпадает с
static void foo() {
synchronized(SomeClass.class) {
...
}
}
, и
synchronized void foo() {
...
}
совпадает с
void foo() {
synchronized(this) {
...
}
}
, можно использовать любой объект в качестве блокировки. Если бы Вы хотите заблокировать подмножества статических методов, Вы можете
class SomeClass {
private static final Object LOCK_1 = new Object() {};
private static final Object LOCK_2 = new Object() {};
static void foo() {
synchronized(LOCK_1) {...}
}
static void fee() {
synchronized(LOCK_1) {...}
}
static void fie() {
synchronized(LOCK_2) {...}
}
static void fo() {
synchronized(LOCK_2) {...}
}
}
(для нестатических методов, Вы хотели бы заставить блокировки быть нестатическими полями)
Статические методы используют класс в качестве объекта для блокировки, которая является Utils.class для Вашего примера. Таким образом да, это в порядке.
Почему Вы хотите осуществить это, только единственный поток может получить доступ к DB в любой момент?
Это - задание драйвера базы данных для реализации любой необходимой блокировки, принятие Connection
только используется одним потоком за один раз!
Наиболее вероятный, Ваша база данных совершенно способна к обработке нескольких, параллельный доступ
Если это относится к чему-то данные в Вашей базе данных, почему бы не использовать блокировку изоляции базы данных для достижения?
Для ответа на вопрос да, это делает: Ваш synchronized
метод не может быть выполнен больше чем одним потоком за один раз.